4

cpp でコーディングされたサードパーティの dll を使用するアプリケーションを c# でコーディングしています。dll に対していくつかの呼び出しを行いましたが、1 つを除いてすべて機能しています。

私のコードは、次の方法で呼び出しを行います。

return ObjectGetStringEntryID(pObject, strEntryID, strEntryID.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern bool ObjectGetStringEntryID(IntPtr pObject, StringBuilder strEntryID, int nMaxLength);

ソースコードにアクセスできるので、次の定義が含まれていることがわかります。

BOOL ObjectGetStringEntryID(CMAPIObject* pObject, LPTSTR szEntryID, int nMaxLength)

前に述べたように、同じ形式を使用してこの dll を他にもいくつか呼び出しましたが、成功しました。

したがって、役立つ場合は次の設定があります。

public const CharSet DefaultCharSet = CharSet.Ansi;

私の電話で私が間違っているかもしれないことを誰かが見ていますか? 同じクラスから、次のように呼び出します。

MessageGetSubject(pObject, strSubject, strSubject.Capacity);

[DllImport(EXTERNAL_DLL, CharSet = DefaultCharSet)]
protected static extern void MessageGetSubject(IntPtr pMessage, StringBuilder strSubject, int nMaxLength);

メソッドに一致するもの:

void MessageGetSubject(CMAPIMessage* pMessage, LPTSTR szSubject, int nMaxLength)

これは、機能していない呼び出しと同じ c# と cpp の両方のクラスからのものですが、問題なく機能します。呼び出し方に違いはないように見えるので、どちらも機能するか機能しないかのどちらかです。

私が間違っていることについて誰かが何か洞察を持っているなら、私は大いに助けていただければ幸いです。

4

1 に答える 1

3

EntryPointNotFoundExceptionシンボルObjectGetStringEntryIDが DLL によってエクスポートされないことを意味します。エクスポート ファイル (または __declspec 宣言) をチェックして、その名前でエクスポートされていることを確認します。

これは役立つかもしれません: DLL からのエクスポート

于 2012-12-14T20:49:04.390 に答える