Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов 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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо