我目前正在尝试移植旧的 owl-c++-builder-projekt 以使用 XE2 和 owlnext。在旧文件中,我可以简单地调用一行
(FARPROC)LP_I2COpen = GetProcAddress(Hi_I2C, "I2COpen");
虽然 LP_I2Open 定义为
#ifdef WIN32
#define CALLING_CONVENTION __stdcall
#else
#define CALLING_CONVENTION far pascal
#endif
int CALLING_CONVENTION (*LP_I2COpen)(HWND hndl,HINSTANCE hInstance, struct I2C_PROP far *ps);
#ifdef _WIN64
typedef INT_PTR (FAR WINAPI *FARPROC)();
#else
typedef int (FAR WINAPI *FARPROC)();
#endif
WINBASEAPI FARPROC WINAPI GetProcAddress(...
这些代码块实际上来自多个文件。我认为这个顺序很直观。
现在我有一些困难来根据需要重写它。我了解,现在左侧被理解为返回值的转换方法,但不能分配给特定值,因此会引发“L-Value expected”错误。但是,我不太清楚如何将 FARPROC 转换为适合 LP_I2COpen 的东西...尝试不进行任何转换会引发此错误:
[BCC32 Fehler] Dio.cpp(2906): E2034 Konvertierung von 'int (__stdcall *)()' nach 'int (__stdcall *)(HWND__ *,HINSTANCE__ *,I2C_PROP *)' nicht möglich
那么,有人知道我在这条线上犯了哪些错误吗?
(FARPROC)LP_I2COpen = GetProcAddress(Hi_I2C, "I2COpen");
问候,朱利安