2011-07-07 41 views
0

我有一个DLL,我想添加到我的C#项目,我有一些问题。首先,我的DLL用C++编码,并且我得到了一个函数的接口来导出它。我怎样才能控制一个DLL分离

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

我有一个实例“PS”是初始化一个插座时,DLL连接。重点是当我调用我的导出函数时,我需要初始化此实例。我的问题是,当我在我的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(); 

那我tryed一些重要的事情:

  1. 导入该项目的基准的DLL:不能因为它不是一个COM组件。
  2. 使用LoadLibrary,FreeLibrary和GetProcAddress手动导入DLL:结果相同
  3. 在循环中调用我的导出函数:同样的事情,但DLL在分离之前连接了一段时间。

我想知道为什么我的DLL是分离的,我怎么能保持它连接的剩余的过程生活。

非常感谢

+0

无法回答。 –

+0

'我的DLL没有明显的原因被分离出来......你是否得到一个异常?你可以在这里发布吗?不知道你是什么意思的'detatched' ... – SwDevMan81

+0

这不是一个例外,我只是在DLL附加/分离时调用MessageBox:'case DLL_PROCESS_ATTACH: \t \t ps.Connect(); MessageBox(NULL,“p_attach”,“IbeTheSee”,MB_ICONWARNING); \t case DLL_PROCESS_DETACH: \t \t ps.Disconnect(); \t \t MessageBox(NULL,“p_detach”,“IbeTheSee”,MB_ICONWARNING);' – patrickT87

回答

0

也许您的DLL自身发生异常。使其在Visual Studio中分离以防止应用程序崩溃。毕竟C#是托管代码。

尝试使用具有非常简单功能的不同(虚拟)dll执行相同的过程。如果它仍然存在,那么你的方法的某些内容是错误的,否则就是你试图使用的DLL。