我想将/ include和C ++ dll文件引用到我的C#类库中,使用普通的C#窗体我只是将dll放在工作目录中,这对类库来说似乎不起作用,我怎么得到它找到.dll?
[System.Runtime.InteropServices.DllImportAttribute("ve.dll", EntryPoint=<MethodName>, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
这是对方法的调用,我所包含的DLL位于构建文件夹中。
答案 0 :(得分:2)
您可能需要一个构建后步骤,以确保在重新编译应用程序时将DLL复制到构建输出文件夹。一旦完成,DLLImport
属性应该能够使用文件的短名称找到DLL,而不需要任何路径信息(因为它将是执行程序集的本地)。
答案 1 :(得分:2)
c ++ dll需要是托管exe的本地(如果托管exe引用c#dll它将在构建时将其本地复制到自身)或者在系统PATH环境变量中的位置。
您可以将c ++ dll添加到c#项目(添加 - &gt;现有项目 - &gt;所有文件)并将Copy to Output Directory
设置为Copy if newer
或Copy Always
并设置{{1 } Build Action
(IIRC是默认选项)
答案 2 :(得分:1)
如果它不是托管DLL,则需要使用DllImport属性。假设DLL已导出函数。您可以使用 dumpbin / exports
检查导出的函数名称private const string DLLPATH = "MyDLL.dll";
[DllImport(DLLPATH, EntryPoint = "GetDLLStatus")]
public static extern int GetDLLStatus();
[DllImport(DLLPATH, EntryPoint = "SomeOtherFunction")]
public static extern float SomeOtherFunction();
DllImport将首先在应用程序目录中查找DLL,然后查看路径