我遇到了以下问题:
我正在我的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”或者我错了吗?
答案 0 :(得分:4)
由于您要声明变量,因此它们必须具有不同的名称。与可以重载相同名称的函数,过程和方法不同。
因此,通过为两个变量选择不同的名称来解决您的问题。
并删除两个变量声明中stdcall
之后的所有内容。这些关键字仅适用于程序和方法,而不适用于程序变量。
如果要使用GetProcAddress
明确链接,则必须使用变量。您需要一个变量来保存GetProcAddress
返回的函数指针。如果您使用external
关键字隐式链接,那么您将没有变量。然后你可以声明用相同的名称重载的函数。
我必须承认,我为这些变量选择了相同的名称感到惊讶。它们必须在C代码中具有不同的名称,并且必须使用不同的名称从DLL导出它们。我希望你不要试图用不同的参数列表调用相同的函数。这当然行不通。
我可以看到的另一个问题是你的string
参数不可能与C库中使用的参数匹配。你需要使用PChar
我怀疑。但这确实是另一个问题的主题。