![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов DLL из Excel VBA (СРОЧНО ! ОЧЕНЬ ВАЖНО !) [D5, Win95/98]
Velocity © (2003-10-17 06:58:00)
Народ, помогите плиз, великая проблема: написал функцию со след. параметрами 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, возвращается значение регистров, которое мне ничего не говорит, поскольку я в этом пока что не рублю совсем. В чём дело? как решить траблу? Помогите плиз, срочно надо. Заранее спасибо
Polevi (2003-10-24 10:42:00) [1]
а лучше написать COM сервер
anonymous (2003-10-24 10:41:00) [2]
да нет проблем с PChar(твоястрока), не нужно никаких вариантов,
тем более ком-серверов. просто "твоястрока" д.б. глобальной переменной (string), иначе при выходе из процедуры ее значение не определено.
Polevi (2003-10-21 10:45:00) [3]
а лучше написать COM сервер
Digitman (2003-10-20 17:09:00) [4]
> Velocity
не выдумывай.
если декларация форм.параметра типа String в VBA делается с ByVal, а декларация того же параметра в Pascal - с PChar (при stdcall), то никаких проблем с передачей факт.параметра нет.
Velocity (2003-10-20 16:47:00) [5]
Ндааа... Уже на входе функции появляется мусор (один символ, если с PChar) а если с OleVariant - так и воще runtime error (какая точно не помню). Видать билли постарался...
OlegK (2003-10-17 15:56:00) [6]
PChar, VBasic "красиво" НЕ принимает, воспользуйся советами: clickmaker-а и Unknown...
Velocity (2003-10-17 12:42:00) [7]
Хммм... ок, попробую так, может и получится
clickmaker (2003-10-17 11:44:00) [8]
Дельфи
(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
Unknown (2003-10-17 11:40:00) [9]
Я использовал OleVariant помню что с PChar были проблемы но не помню что именно.
shurrraaa (2003-10-17 11:38:00) [10]
создай функцию вида
Split(data,splitter:string;part:BYTE):pchar;stdcall;
begin
.....
Split:=pchar(твоястрока);
end;
в excelе работа производиться с pchar - у самого была когда то проблема с этим
MBo (2003-10-17 08:48:00) [11]
> менять что-либо поздно, программа почти закончена
Передавать можно строковый тип, ИЗВЕСТНЫЙ басику (видимо, PChar он знает)
Velocity (2003-10-17 08:39:00) [12]
Возможно, но что ж делать - приходится даже с ЭТИМ работать. Уже каюсь, но менять что-либо поздно, программа почти закончена. Можно конечно через буфер, но... не самое красивое решение. И тормозное вдобавок. Мож кто сталкивался, подскажите.
MBo (2003-10-17 07:00:00) [13]
VBA не представляет себе, как велик и могуч дельфийский string.