我的插件是从主机应用程序调用的。这个宿主应用程序向我的插件发送一些函数地址,插件需要执行这个外部函数。
主机应用程序是用Delphi编写的,我的插件是用C ++ Borland Builder编写的。
插件初始化过程称为 PLUGIN_INIT ,并由主机应用程序调用。
外部函数地址作为 params 数组的第6个元素提供。此函数有一个输入char *参数,它返回void *指针。所以,所有代码都是这样的:
typedef void *(*F)(char *); // external function type
extern "C" __declspec(dllexport) bool WINAPI PLUGIN_INIT(int *params) {
F func = (F)*(params + 5); // here I get function address
try {
void *retValue = func("input_value"); // trying to call external function
} catch (...) {
printf("error");
}
}
结果,我总是收到“错误”消息。可能是什么问题?其他用Delphi编写并使用类似声明的插件工作正常。
修改
在调试器中检查显示 func 函数指针指向充满零的内存。