更新: RoInitialize
roapi.h にどのように見えるかを追加しました
純粋な C++11 WinRT ライブラリを作成中です。私は WRL や C++/CX を使用しません (もちろん純粋な C++11 が必要な場合)。
MSVC でコンパイルして実行するコードを取得しましたが、Mingw Gcc でコードをコンパイルして実行できるかどうかを確認したいと考えています。具体的には、nuwen.net から入手した GCC 4.7.2 を使用しています。
この時点で必要なのは、Windows API 関数RoInitialize
、RoUnitialize
、RoGetActivationFactory
およびHSTRING
関数WindowsCreateString
、WindowsDuplicateString
、を呼び出す方法WindowsDeleteString
です。
このプログラムを G++ でコンパイルしようとしましたが、エラーが発生しました
extern "C"{
__declspec(dllimport)int __stdcall RoInitialize(int);
}
int main(){
RoInitialize(1);
}
私はコンパイルしようとしましたが、得ました:
c:\Users\jrb\Desktop>g++ gccwinrt.cpp
C:\Users\jrb\AppData\Local\Temp\ccy7y1V9.o:gccwinrt.cpp:(.text+0x1e): undefined
reference to `_imp__RoInitialize@4'
collect2.exe: error: ld returned 1 exit status
これらの関数を宣言する方法と、どのライブラリにリンクする必要があるかについて、誰かが私を正しい方向に向けることができれば、私はそれを感謝します. たとえそれが必要だとしてもLoadLibrary
/GetProcAddress
私はそれで大丈夫です
更新:RoInitialize
ヘッダー roapi.h は次のようになります。
ROAPI
_Check_return_
HRESULT
WINAPI
RoInitialize(
_In_ RO_INIT_TYPE initType
);
ROAPI is just a define for __declspec(dllimport)
_Check_return_ is part of SAL (Secure Annotations Language?)
HRESULT maps to int32
WINAPI is a define for __stdcall
RO_INIT_TYPE is an enumeration so int should cover it