Dll
Вот фрагмент кода её хедер файла:
{
public:
__declspec(dllexport) bool InitViewer(void* wnd);
...
};
как использовать её в Билдере
typedef bool (__declspec(dllimport) FType(void*));
FType * MyFunc;
MyFunc = (FType)GetProcAddress(dllInst, "InitViewer");
if(MyFunc(Form->Handle)) ...
не получается
MyFunc ?= NULL
dllInst ?= NULL
вот в этой строке:
oxotnik333
dllInst != NULL
Запрос возвращает такое:
А ты ждешь такое:
Скорее всего проблема в том, что тип bool - имеет подводные камни, не помню какие =)
Поэкспериментируй с
должно помочь.
или это не важно?
не стоит ли сделать так:
в хедер файле, и что это может нам дать?
Експортироваемая функция:
как показывает плугин fileinfo у Total Commander'а ;)
или это не важно?
не стоит ли сделать так:
в хедер файле, и что это может нам дать?
Експортироваемая функция:
как показывает плугин fileinfo у Total Commander'а ;)
Конечно, лучше если тебе поможет кто поопытнее, но по-моему, если ты попыдаешься поменять эту строчку
Так, чтобы компилятор думал, будто это
То должно заработать.
Как она должна выглядеть я тоже не знаю, вечно путаюсь с указателями на функции, но попробуй вот так:
синтаксически не верно
синтаксически не верно
Ну да, я же говорю, что путаюсь в этих вещах. =)
Поэкспериментируйте, добавьте скобки где-нибудь, уберите, ещё что-то, Ваша задача получить в итоге указатель на то, что возвращает DLL.
В инете валом инфы на эту тему тоже. Когда у меня была такая проблема, я минут 20 помучился с экспериментами и нашел подходящий вариант. Так и Вы давно бы уже решили проблему =)
Затычка в том, что нет приведения типов у указателей на функцию, поэтому тип указателя, который получает из DLL указатель на функцию, должен в точности совпадать с типом возвращаемого указателя. А значит, что тип указателя на функцию определен неверно, вот его и надо поправить %)
сделал хедер файл таким:
т.е. избавился от класса
if (dllInst == NULL) ShowMessage("dll = Null");
//typedef int __stdcall (FType*)();
typedef int (*importFunction)(void*); // это прокатывает, но MyFunc == NULL
//typedef int (__declspec(dllimport) importFunction(void*)); // ругается :(
importFunction MyFunc;
MyFunc = (importFunction)GetProcAddress(dllInst, "InitViewer");
if(MyFunc == NULL) ShowMessage("false");
вопрос немного не в тему
как получить HWND hWnd элемента окна, например Панели,
Panel1->Handle ? так или не так?