【发布时间】:2013-04-18 13:55:49
【问题描述】:
我目前正在尝试移植旧的 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");
问候, 朱利安
【问题讨论】:
标签: c++ c++builder stdcall c++builder-xe2 owlnext