Forum > Russian

Не работает GetProcAddress

(1/2) > >>

spayn:
Добрый день! После обновления на новую версию FPС 3.2.0 перестал работать GetProcAddress(hInstance, 'ExtAddToLog') - запускаю из DLL для обращения к EXE за нужной функцией, выдает пустое значение. На fpc 3.0.2 работало успешно. Подскажите как решить данную проблему в новой версии?

skalogryz:
что за .dll?  - сам ли .dll компилируешь, али уже существует она?
на какой CPU оринетируешься, да совпадает ли архитексутра с архитектурой dll?
а значение hInstance какое?
а что GetLastError() возвращает? (после вызова GetProcAddress())

spayn:
Все компилирую в одной среде разработки, dll в том числе. DLL отдельная сущность подключаемая к ядру, чтобы выполнять определенные действия при условии. Архитектура единая на 64 битной все делаю. hInstance выдает MZ. Сам GetProcAddress() не выдает ошибок при выполнении команды, выдает пустоту. Ранее выдавал поинтер на предыдущих версиях.

Seenkao:
Вам задали вопрос, какую DLL вы используете. (имя файла напишите).
Вообще, такие вещи лучше скидывать вместе с программой. Вероятно, при переустановке FPC удалились либо пути, либо сам файл (но это не обязательно), потому проверьте, существует ли данный файл и проверьте пути до него.
Можете попробовать прописать пути до этого файла вручную.

skalogryz:

--- Quote from: spayn on July 29, 2021, 07:17:02 am ---hInstance выдает MZ. Сам GetProcAddress() не выдает ошибок при выполнении команды, выдает пустоту. Ранее выдавал поинтер на предыдущих версиях.

--- End quote ---
hInstance не должен выдавать пустоту, вместое hInstance следует передавать handle бибилиотеки. LoadLibrary() где вызывается?

какой код выдаёт GetLastError()?


Вот пример поиграть:

hostapp.pas

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---program hostapp;{$mode objfpc}uses  Windows; type  TNumFunc =  function : Integer; var  h : THandle;    p : Pointer;begin  writeln('fpc: ',{$i %FPCVERSION%},'; pointer size: ', sizeof(pointer));  h := LoadLibrary('plugin.dll');  if (h <> 0) and (h <> INVALID_HANDLE_VALUE) then  begin    p := GetProcAddress(h,'ExtAddToLog');    if p <> nil then      writeln('meaning of life: ',  TNumFunc(p)())    else      writeln('error: ', GetLastError);  end else    writeln('no plugin.dll');end.
plugin.pas

--- Code: Pascal  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---library plugin;{$mode objfpc} function ExtAddToLog: Integer; cdecl; begin  Result:=42;end; exports  ExtAddToLog; end.
мой результат:

--- Code: Text  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} --->hostapp.exefpc: 3.2.0; pointer size: 8meaning of life: 42
Что доказывает: FPC 3.2 может загрузить функцию ExtAddToLog из 64-битной dll-ки

Navigation

[0] Message Index

[#] Next page

Go to full version