Win32 DLLを実装する必要があり、WinCEのC#DllImportで呼び出す必要があります。 したがって、Win32スマートデバイスプロジェクトを作成し、Windows Mobile 5.0スマートフォンSDK を選択し、シンボルをエクスポートするオプションを使用してdllプロジェクトを作成します。 は、それから私は、関数宣言の前にextern "C" キーの単語を追加します。win32 smartpone dllを作成してWinCEのC#DllImportで呼び出す方法
の.h
#ifdef WINCE2_EXPORTS
#define WINCE2_API __declspec(dllexport)
#else
#define WINCE2_API extern "C" __declspec(dllimport)
#endif
extern "C" WINCE2_API int __cdecl Add(int A,int B);
た.cpp
extern "C" WINCE2_API int __cdecl Add(int A,int B)
{
return A+B;
}
私はC#でDLLIMPORTを使用する場合:
[DllImport("WinCE2.dll", EntryPoint = "Add")]
static extern int Add(int A, int B);
私はいつも持っていますSystem.MissingMethodException WinCE 5.0エミュレータおよびWinCE6.0デバイス。
Googleでいくつかの情報を検索したところ、解決策が見つかりました。 まず、プロジェクトでの.def追加:
LIBRARY "WinCE2"
EXPORTS
Add DATA
誰かが__declspec(のdllexport)が.defファイルを置き換えることができると言うのフォーラムで。 しかし、この解決策にもSystem.MissingMethodExceptionがあります。
次に、スタックオーバーフローの解決策を見つけました。 __cdeclキーワードを追加する必要があります。 Win32 DLLプロジェクトを作成しましたが、プロジェクト設定でデフォルトで__cdeclが追加されることがわかりました。 しかし、Win32 Smartphoneプロジェクトはありません。 だから私はそれを試みるだけでなく、System.MissingMethodExceptionを取得しました。 その後、私はWin32 DLLで同じコードを試して、C#で呼び出すと動作します。 だから私はwinceが働くことができない理由はありません。 私はdllをコピーして実行可能ファイルフォルダを救済しました 誰かが私にいくつかのexpeienceを教えてもらえますか?
dumpbinを使用して、DLLがexpexted nameの関数をエクスポートしたことを確認しましたか? – harper
dumpbinを使ってDLLをチェックしましたが、その機能が見つかりませんでした。 プロジェクトの設定は必要ですか? –