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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
14-1099581539
olookin
2004-11-04 18:18
2004.12.19
Прогнозы на 5-й тур Лиги Чемпионов


14-1101515011
Andy BitOff
2004-11-27 03:23
2004.12.19
Дорогой IE, я ухожу от тебя навсегда


14-1101707365
TButton
2004-11-29 08:49
2004.12.19
LAN


1-1102067876
Aleksandr.
2004-12-03 12:57
2004.12.19
Как получить доступ к FMemory TMemoryStream?


14-1101561274
DelphiN!
2004-11-27 16:14
2004.12.19
Плагин для 1С для удаленного просмотра отчетов (через модем)