Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.047 c
14-1101489942
OneFragLeft
2004-11-26 20:25
2004.12.19
Альтернативный SMTP сервер.


3-1100872553
Dionnis
2004-11-19 16:55
2004.12.19
Поиск по базе ...


3-1101194416
Tomkat
2004-11-23 10:20
2004.12.19
Ремонт базы IB


1-1101973372
denis24
2004-12-02 10:42
2004.12.19
горизонтальный скролинг у listbox


1-1102006153
Deller
2004-12-02 19:49
2004.12.19
Работа с буфером обмена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский