12

更新: RoInitializeroapi.h にどのように見えるかを追加しました

純粋な C++11 WinRT ライブラリを作成中です。私は WRL や C++/CX を使用しません (もちろん純粋な C++11 が必要な場合)。

MSVC でコンパイルして実行するコードを取得しましたが、Mingw Gcc でコードをコンパイルして実行できるかどうかを確認したいと考えています。具体的には、nuwen.net から入手した GCC 4.7.2 を使用しています。

この時点で必要なのは、Windows API 関数RoInitializeRoUnitializeRoGetActivationFactoryおよびHSTRING関数WindowsCreateStringWindowsDuplicateString、を呼び出す方法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
4

4 に答える 4

16

これらの関数のインポート ライブラリはruntimeobject.lib(MSDN ドキュメントでは言及されていません) です。これは、Windows 8 用の Windows SDK にあります。

于 2013-05-24T13:32:15.030 に答える
-1

RoInitialize を含むインポート ライブラリがない場合は、LoadLibrary/GetProcAddress を使用して型を解決する必要があります。

于 2013-05-13T04:56:34.260 に答える