Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
ВнизDelphi DLL и Excel Найти похожие ветки
← →
NovaPS © (2004-12-01 16:40) [0]Есть простенький код на Delphi, который компилится в DLL:
library ExcelDLL;
uses
ShareMem, SysUtils, Classes;
function showMeText (Str1:String): String; stdcall;
begin
Result := Str1 + " str2";
end;
exports
showMeText index 1 name "showMeText";
begin
end.
и код на VB в Excel-e:
Private Declare Function showMeText Lib "C:\Temp\ExcelDLL.dll" (ByVal S As String) As String
Sub CreateListFile()
Dim a_text As String
a_text = showMeText("AAA")
MsgBox a_text
End Sub
При запуске скрипта Excel вылетает.
Подскажите пожалуйста, что не так?
← →
Devel © (2004-12-01 16:47) [1]dlea vzaimodistvia Delphi + VB lushe ispol"zovat" OleVariant
← →
Digitman © (2004-12-01 16:51) [2]
> Excel вылетает
рейсом на г.Задрипинск ?
с чего ты вообще взял, что VBA-тип STRING совместим с Паскаль-типом STRING ?
← →
Digitman © (2004-12-01 16:54) [3]
> Devel © (01.12.04 16:47) [1]
> dlea vzaimodistvia Delphi + VB lushe ispol"zovat" OleVariant
ерунда полная.
← →
NovaPS © (2004-12-01 17:01) [4]
> чего ты вообще взял, что VBA-тип STRING совместим с Паскаль-типом
> STRING ?
Я в этом не разбираюсь.
Мне надо чтобы DLL получила некую строку с данными, далее по ФТП загрузила данные, а потом отправила в Excel.
Подскажите как привильно написать код.
← →
Digitman © (2004-12-01 17:08) [5]
> NovaPS © (01.12.04 17:01) [4]
> Я в этом не разбираюсь.
ну и плохо.
плохо именно то, что ты взялся за решение задачи, в технологии/механизмах которой ничерта не смыслишь пока еще.
передача строковых параметров между VBA-кодом и Паскаль-кодом должна осуществлятьчся не иначе как с пом. PChar-указателей.
передача строковых параметров VBA -> Pas таким образом не вызывает никаких проблем, достаточно в VBA-коде декларировать такие параметры как ByRef .. а вот с возвратом результата Pas -> VBA дело обстоит сложнее, особенно когда длина строкового рез-та, формируемого в теле Pas-Ф-ции, заранее неизвестна.
← →
Digitman © (2004-12-01 17:18) [6]вот пример концептуального решения задачи:
library ExcelDLL;
uses
ShareMem, SysUtils, Classes;
procedure showMeText (Param:PChar; Result: PChar); stdcall;
var
tmp: String;
begin
tmp := StrPas(Param) + "BB"; //результат длиной не более 4-х символов
strcopy(Result, PChar(tmp));
end;
exports
showMeText index 1 name "showMeText";
begin
end.
и код на VB в Excel-e:
Private Declare Sub showMeText Lib "C:\Temp\ExcelDLL.dll" (ByRef S As String, ByRef RsltStr As String)
..
Dim a_text As String
Dim Result as String
Result = " " //готовим память под результ.строку длиной 4 символа
showMeText("AA", Result) //передаем адрес исх.строки-параметра и адрес строки, куда будет записан результат доиной не более 4 символа
MsgBox Result
← →
NovaPS © (2004-12-01 17:33) [7]Большое спасибо.
← →
NovaPS © (2004-12-01 17:49) [8]Попробовал...но работать отказывается.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.028 c