0

我遇到以下问题:

我在我的 Lazarus 项目中加载了一个 C-DLL 的函数,比如

@dpstate_callCustomfunction:= GetProcAddress(mConnectorLibrary, 'dpstate_callCustomfunction');  

这个函数在 C-DLL 中用不同的变量实现了不同的实现,所以我必须在 Lazarus 项目中声明它超过 1 次。我试过这样:

 var dpstate_callCustomfunction: function(plugin, method, paramName: string; customfunctionCallbackFunction: string; id: PChar): integer; stdcall; overload; override;
 var dpstate_callCustomfunction: function(plugin, method, paramName: string; resultParam: PChar): integer; stdcall; reintroduce; overload;

但是编译器告诉我以下错误:“错误:procvar 声明中不允许过程指令“OVERRIDE””“错误:procvar 声明中不允许过程指令“OVERLOAD””

我究竟做错了什么?=/如果我删除它编译的“var”,但我认为我需要“var”还是我错了?

4

1 回答 1

4

由于您要声明变量,因此它们必须具有不同的名称。与可以重载同名的函数、过程和方法不同。

因此,通过为两个变​​量选择不同的名称来解决您的问题。

并删除stdcall两个变量声明中的所有内容。这些关键字仅适用于过程和方法,不适用于过程变量。

如果要使用 . 显式链接,则必须使用变量GetProcAddress。您需要一个变量来保存由GetProcAddress. 如果您使用external关键字隐式链接,那么您将没有变量。然后你可以声明重载的同名函数。

我必须承认,我很惊讶您为这些变量选择了相同的名称。它们在 C 代码中必须具有不同的名称,并且必须从 DLL 中以不同的名称导出。我希望您不要尝试使用不同的参数列表调用相同的函数。那肯定行不通。

我可以看到您遇到的另一个问题是您的string参数不可能与 C 库中使用的参数匹配。你需要使用PChar我怀疑。但这确实是另一个问题的主题。

于 2013-02-13T16:49:47.270 回答