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

Вниз

Проблема с обращением к dll   Найти похожие ветки 

 
leonidus ©   (2007-06-07 14:03) [0]

Господа, подскажите пожалуйста, есть dll и описание доступа к нему на Си, и нужно обратится к ней из Delphi.

В частности описание 2-х первых функций:

ENGINE_API WORD InitEngine(LPCTSTR wszPath);

Производит инициализацию Engin’a.
wszPath – путь к папке.

DENGINE_API void DoneEngine();
Завершение работы с Engin’ом.

Делаю так:

var
InitEngine: function(NameFile: string): word; stdcall;
hinstLib: integer;
begin
hinstLib:= LoadLibrary("d:\Exp\Engine.dll");
if hinstLib <> 0 then
begin
@InitEngine:=GetProcAddress(hinstLib, "InitEngine");
if nil <> @InitEngine then
 begin
 
 //!!!!!!!!!!!

 end;

 FreeLibrary(hinstLib);
end;
end;

но туже где я поставил восклицательные знаки программа почему-то не доходит, хотя до проверки if nil <> @InitEngine then доходит нормально. В чем же дело? Может я как-то неправильно обращаюсь к dll`ке?


 
MBo ©   (2007-06-07 14:14) [1]

А ты уверен, что из DLLпроцедур экспортируется именно под именем "InitEngine" ? Посмотри программой TDump, может быть искажение имен типа __InitEngine@8GxPdf

кроме того,  NameFile: string не соответствует LPCTSTR wszPath
PWideChar, видимо, должно быть


 
leonidus ©   (2007-06-07 14:18) [2]

>А ты уверен, что из DLLпроцедур экспортируется именно под именем "InitEngine"
да уверен, передомной дока лежит.

А что это за зверь такой TDump ?


 
MBo ©   (2007-06-07 14:24) [3]

>TDump ?
программа в Delphi/bin

>да уверен, передомной дока лежит.
У сишников искажение имен (name mangling) выполняется автоматически (в зависимости от спецификаторов экспорта), поэтому в доке они всегда пишут неискаженное имя.


 
clickmaker ©   (2007-06-07 15:02) [4]


> ENGINE_API WORD InitEngine(LPCTSTR wszPath);

это может быть и const PChar и const PWideChar в зависимости от сишного дефайна UNICODE.
Так что надо уточнять, уникодная ли DLL или нет


 
Dimaxx ©   (2007-06-07 17:02) [5]


> Может я как-то неправильно обращаюсь к dll`ке?

Ты еще не успел к ней обратиться.

var
 InitEngine: function(NameFile: string): word; stdcall;
 DoneEngine: procedure; stdcall;
 hinstLib: integer;

begin
 hinstLib:= LoadLibrary("d:\Exp\Engine.dll");
 if hinstLib<>0 then
 begin
   @InitEngine:=GetProcAddress(hinstLib, "InitEngine");
   @DoneEngine:=GetProcAddress(hinstLib, "DoneEngine");
   if @InitEngine<>nil then InitEngine(PChar("c:\workdir"));
   if @DoneEngine<>nil then DoneEngine;
   FreeLibrary(hinstLib);
 end;
end;


Примерно так. Возможно соглашение о передаче параметров не stdcall, а, например, cdecl или еще как извращенно. Тогда пробовать или искать доку на либу.


 
Dimaxx ©   (2007-06-07 17:03) [6]

Тьфу, var InitEngine: function(NameFile: PChar): word; stdcall;


 
Однокамушкин   (2007-06-08 13:47) [7]

Надо ещё посмотреть, что это за макрос ENGINE_API... скорее всего он просто содержит __declspec(dllimport) и тогда на него можно забить, но на всякий случай стоит проверить...



Страницы: 1 вся ветка

Текущий архив: 2007.07.01;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.004 c
2-1181363908
Стул
2007-06-09 08:38
2007.07.01
MS Word. Как с ним работать?


2-1181018207
DemonP
2007-06-05 08:36
2007.07.01
где в реестре хранится информация о формате времени (12 или 24) ?


3-1175687982
elserpiente
2007-04-04 15:59
2007.07.01
from MySQL to Firebird ;)


11-1164190686
Don
2006-11-22 13:18
2007.07.01
Minimize / Restore главного окна


2-1181037181
Изя
2007-06-05 13:53
2007.07.01
чтото вида PageControl





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский