外部ドライバー dll を使用しているときに、一部のプログラムで問題が発生しました。
正常にコンパイルされますが、ビルドしようとすると次のようになります。
error LNK2001: unresolved external symbol "void __stdcall Function1(void (__fastcall*)(int))" (?Function1@@YGXP6IXH@Z@Z)
関数のヘッダー定義:
void __stdcall Function1(TDeviceCallback callback);
さて、「珍しい部分」 このプロジェクトは、デバイス dll と他のアプリケーションとの間でプロキシのように機能する dll です。そのアプリケーションが c 関数を呼び出すことができるという制限のおかげで、プロキシ dll を動作させるにはいくつかの特別なオプションを使用してビルドする必要があります。
オブジェクト/ライブラリ
winapims.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
プロジェクト オプション:
winapims.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/test2.pdb" /machine:I386 /out:"Release/test2.fll" /implib:"Release/test2.lib"
このようなプロキシは初めてではありませんが、このような問題が発生したのは初めてです。それが何であるかについてのアイデアはありますか?
編集:問題は、プロキシを fastcall として使用する必要があるようですが、リンカはその関数だけで変換に問題があります:(