6

これは、すべてのC#の達人に当てはまります。私はすでにこれに頭を悩ませてきました、無駄にネット上であらゆる種類のアドバイスを試しました。このアクションは、WindowsMo​​bile5.0で発生しています。

MyDll.dllという名前のDLLがあります。MyDll.hには次のものがあります。

extern "C" __declspec(dllexport) int MyDllFunction(int one, int two);

MyDll.cppでのMyDllFunctionの定義は次のとおりです。

int MyDllFunction(int one, int two)
{
    return one + two;
}

C#クラスには、次の宣言が含まれています。

[DllImport("MyDll.dll")]
extern public static int MyDllFunction(int one, int two);

同じクラスで、次の方法でMyDllFunctionを呼び出しています。

int res = MyDllFunction(10, 10);

そして、これは血なまぐさいものが私に「PInvokeDLL'MyDll.dll'が見つかりません」を与え続けるところです。次のように宣言された「GetAsyncKeyState(1)」などのシステムコールで実際にPInvokeを実行できることを確認しました。

    [DllImport("coredll.dll")]
    protected static extern short GetAsyncKeyState(int vKey);

MyDll.dllは実行可能ファイルと同じフォルダーにあり、変更も成功もせずに/Windowsフォルダーに入れてみました。アドバイスや解決策は大歓迎です。

4

4 に答える 4

4

私も同じ問題を抱えていますが、今回は関係するプラットフォームに明らかな違いはありません。「普通」であるはずのものが、文書化されておらず、難しく、何よりも「不安定」である理由は何ですか。PPCエミュレーターにアクセスして、DLLがCLRが期待する場所にあることを段階的に確認できるツールはありますか(同じディレクトリとエミュレーターのwindowsディレクトリの両方に配置しました-私はエミュレーターのファイルエクスプローラーを使用してそこにあることがわかります)、(b)CLRがそれをロードできること(十分なメモリがあるなど)、(c)CLRが存在する関数を見つけることができること(愚かな「缶を超えることができれば便利です」 「dll が見つかりません」エラー)

私は、ゲイツや実際に「ウィンドウズ モバイル」チームのいずれかに、彼らが作成したがらくたを使用するよう強制したいと考えています。

于 2009-01-06T11:14:39.597 に答える
2

たぶんこれはチェックするのは明らかなことのように思えますが、正しいCPUアーキテクチャ用にネイティブDLLをコンパイルしていますか?IIRC、WindowsMo​​bileは複数のCPUアーキテクチャで動作します。

于 2008-11-26T08:27:32.663 に答える
0

リストした例外と質問に入力したpinvoke署名の名前は、それぞれMyDll.dllとThreadBenchLib.dllです。それはタイプミスですか、それとも問題ですか?

問題がない場合は、依存関係でDLLを開いてみてください。依存関係が満たされていないために、DLLのロードが失敗している可能性があります。

于 2008-11-26T07:55:38.267 に答える
0

私は同じ問題を抱えています。WinCE dll の依存関係を探すために Depends.exe を使用しましたが、これはデバッグ DLL に依存しています。(MSVCR90D.dll) 問題を解決するために、リリース版をコンパイルし、依存関係を確認したところ、問題なく動作しました。

お役に立てれば幸いです

于 2013-04-25T21:44:53.680 に答える