2011-07-07 12 views
0

C#プロジェクトに追加したいDLLがありますが、いくつかの問題があります。まず、私のDLLはC++でコード化されており、エクスポートするための1つの関数のインタフェースがあります。DLLをいつ切り離すかを制御する方法

extern "C" __declspec(dllexport) char* sniff() 
{ 
    return ps.Sniff(); 
} 

DLLが接続されているときにソケットを初期化するインスタンス「ps」があります。要は、エクスポートされた関数を呼び出すときに、このインスタンスを初期化する必要があるということです。私の問題は、私のC#プロジェクトでインポートするとき、私のDLLは明白な理由で分離され、私はもはや私のエクスポートされた関数を呼び出すことはできません。

私はC#の挙にこの構文を使用

[DllImport(@"C:\Documents and Settings\Pat\Bureau\sniffoporn\Release\sniff.dll", EntryPoint = "sniff", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] 
     public static extern IntPtr sniff(); 

私がしようと試みたいくつかの重要な事柄:

  1. は、プロジェクトの参照でDLLをインポートします。そうではありませんすることはできませんので、 COMコンポーネント。
  2. は、ループ内の私のエクスポートされた関数呼び出しと同じ結果:
  3. は手動でのLoadLibrary、FreeLibraryのとのGetProcAddressを使用してDLLをインポート同じことが、DLLは取り外し前に少し長くするために装着されています。

私のDLLが切り離されている理由と、残りのプロセス寿命の間、どのように接続しておくことができるのかを知りたいと思います。

どうもありがとう

+0

回答できません。 –

+0

'私のDLLは明白な理由なしにデタッチされています。 '...あなたは例外を取得していますか?あなたはここに投稿できますか?あなたが 'detatched'で何を意味するのか分かりません... – SwDevMan81

+0

これは例外ではなく、DLLがアタッチ/デタッチするときにMessageBoxを呼び出すだけです:' case DLL_PROCESS_ATTACH: \t \t ps.Connect(); \t \t MessageBox(NULL、 "p_attach"、 "IbeTheSee"、MB_ICONWARNING); \tケースDLL_PROCESS_DETACH: \t \t ps.Disconnect(); \t \tのMessageBox(NULL、 "P_DETACH"、 "IbeTheSee"、MB_ICONWARNING)は、そのが着脱場合 ' – patrickT87

答えて

0

たぶん例外は、あなたのDLL自体に発生します。 Visual Studioでアプリケーションをデタッチして、アプリケーションのクラッシュを防止します。すべてのC#は管理されたコードです。

非常に単純な機能を持つ別の(ダミー)dllで同じ手順を試してください。それでも問題が発生した場合は、お使いのメソッドの何かが間違っています。そうでなければ、使用しようとしているDLLがあります。