Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.19;
Скачать: CL | DM;

Вниз

Вызов DLL из Excel VBA (СРОЧНО ! ОЧЕНЬ ВАЖНО !)   Найти похожие ветки 

 
Velocity   (2003-10-17 06:58) [0]

Народ, помогите плиз, великая проблема: написал функцию со след. параметрами Split(data,splitter:string;part:BYTE):string;stdcall;
в DLL-ке, из дельфи вызывается нормально (не проверял, но уверен на 100%), как видно функция должна возвращать строку. В заголовке VBA-макроса описываю функцию так:
PRIVATE DECLARE FUNCTION Split LIB "MyDll.dll" (data,splitter As String, part as Byte) As String и потом пытаюсь эту ботву вызвать, возникает Error, возвращается значение регистров, которое мне ничего не говорит, поскольку я в этом пока что не рублю совсем. В чём дело? как решить траблу? Помогите плиз, срочно надо. Заранее спасибо


 
MBo ©   (2003-10-17 07:00) [1]

VBA не представляет себе, как велик и могуч дельфийский string.


 
Velocity   (2003-10-17 08:39) [2]

Возможно, но что ж делать - приходится даже с ЭТИМ работать. Уже каюсь, но менять что-либо поздно, программа почти закончена. Можно конечно через буфер, но... не самое красивое решение. И тормозное вдобавок. Мож кто сталкивался, подскажите.


 
MBo ©   (2003-10-17 08:48) [3]

> менять что-либо поздно, программа почти закончена

Передавать можно строковый тип, ИЗВЕСТНЫЙ басику (видимо, PChar он знает)


 
shurrraaa   (2003-10-17 11:38) [4]

создай функцию вида
Split(data,splitter:string;part:BYTE):pchar;stdcall;
begin
.....
Split:=pchar(твоястрока);
end;

в excelе работа производиться с pchar - у самого была когда то проблема с этим


 
Unknown   (2003-10-17 11:40) [5]

Я использовал OleVariant помню что с PChar были проблемы но не помню что именно.


 
clickmaker ©   (2003-10-17 11:44) [6]

Дельфи
(const data,splitter: PChar; part: BYTE): OleVariant; stdcall;

VBA
PRIVATE DECLARE FUNCTION Split LIB "MyDll.dll" (By Val data As String, By Val splitter As String, By Val part as Byte) As Variant


 
Velocity   (2003-10-17 12:42) [7]

Хммм... ок, попробую так, может и получится


 
OlegK   (2003-10-17 15:56) [8]

PChar, VBasic "красиво" НЕ принимает, воспользуйся советами: clickmaker-а и Unknown...


 
Velocity   (2003-10-20 16:47) [9]

Ндааа... Уже на входе функции появляется мусор (один символ, если с PChar) а если с OleVariant - так и воще runtime error (какая точно не помню). Видать билли постарался...


 
Digitman ©   (2003-10-20 17:09) [10]


> Velocity


не выдумывай.

если декларация форм.параметра типа String в VBA делается с ByVal, а декларация того же параметра в Pascal - с PChar (при stdcall), то никаких проблем с передачей факт.параметра нет.


 
Polevi ©   (2003-10-21 10:45) [11]

а лучше написать COM сервер


 
anonymous   (2003-10-24 10:41) [12]

да нет проблем с PChar(твоястрока), не нужно никаких вариантов,
тем более ком-серверов. просто "твоястрока" д.б. глобальной переменной (string), иначе при выходе из процедуры ее значение не определено.


 
Polevi ©   (2003-10-24 10:42) [13]

а лучше написать COM сервер



Страницы: 1 вся ветка

Текущий архив: 2003.12.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
1-62069
Мишка
2003-12-09 11:45
2003.12.19
Привет, может быть кто-нибудь знает есть ли специальные процедуры


3-61904
Димитрий
2003-11-27 15:58
2003.12.19
клиентские координаты шапки текщего поля в гриде


1-62148
Psi-factor
2003-12-07 16:48
2003.12.19
Webbrowser


1-62054
GreenLamer
2003-12-05 19:13
2003.12.19
Запуск приложения и получение кода возврата


1-62142
MaxDDinc
2003-12-07 15:49
2003.12.19
Проблема с RichEdit