在C#类库中包含DLL 我想引用/Cube和C++ DLL文件到我的C类类LIBARY中,用普通的C窗口形式,我把DLL放在工作目录中,这对类库来说似乎不起作用,我如何得到它? [System.Runtime.InteropServices.DllImportAttribute("ve.dll", EntryPoint=<MethodName>, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)] [System.Runtime.InteropServices.DllImportAttribute(“ve.dll”,EntryPoint=,CallingConvention=System.Runtime.InteropServices.CallingConvention.Cdecl)]

在C#类库中包含DLL 我想引用/Cube和C++ DLL文件到我的C类类LIBARY中,用普通的C窗口形式,我把DLL放在工作目录中,这对类库来说似乎不起作用,我如何得到它? [System.Runtime.InteropServices.DllImportAttribute("ve.dll", EntryPoint=<MethodName>, CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)] [System.Runtime.InteropServices.DllImportAttribute(“ve.dll”,EntryPoint=,CallingConvention=System.Runtime.InteropServices.CallingConvention.Cdecl)],c#,class-library,C#,Class Library,这是对方法的调用,我包含的DLL位于生成文件夹中。如果它不是托管DLL,则需要使用DllImport属性。假设DLL已导出函数。您可以使用dumpbin/exports检查导出的函数名 DllImport将首先在应用程序目录中查找DLL,然后在路径中查找如果它不是托管DLL,则需要使用DllImport属性。假设DLL已导出函数。您可以使用dumpbin/exports检查导出的函数名 DllImport将首先在应用程序目录中查找DLL,然后在路径中查找您可能需要一个生成后步骤,以确保在重新编译

这是对方法的调用,我包含的DLL位于生成文件夹中。

如果它不是托管DLL,则需要使用DllImport属性。假设DLL已导出函数。您可以使用dumpbin/exports检查导出的函数名


DllImport将首先在应用程序目录中查找DLL,然后在路径中查找

如果它不是托管DLL,则需要使用DllImport属性。假设DLL已导出函数。您可以使用dumpbin/exports检查导出的函数名


DllImport将首先在应用程序目录中查找DLL,然后在路径中查找

您可能需要一个生成后步骤,以确保在重新编译应用程序时将DLL复制到生成输出文件夹中。完成后,
DLLImport
属性应该能够使用文件的短名称查找DLL,而不需要任何路径信息(因为它将位于执行程序集的本地)。

您可能需要一个生成后步骤,以确保在重新编译应用程序时将DLL复制到生成输出文件夹中。一旦完成, DLimPult属性应该能够使用文件的短名称查找DLL,而不需要任何路径信息(因为它将是执行程序集的本地)。

< P> C++ DLL需要是托管EXE的本地(如果宿主exe引用C’dll,则它将在本地生成本地的自身)。或位于系统路径环境变量中的某个位置


< >您可以将C++ DLL添加到C++项目中(添加->现有项>所有文件),并将代码>复制到输出目录< /代码>,如果新的或“代码>复制总是< /COD>,并设置<代码>构建动作< /代码>到<代码>无< /Calp>(IIrC默认选项)

< P>,该C++ DLL需要是托管EXE的本地。(如果宿主exe引用c#dll,它将在生成时将该本地文件复制到自身)或系统路径环境变量中的某个位置



< >您可以将C++ DLL添加到C项目中(添加->现有项>所有文件),并将代码>复制到输出目录< /代码>,如果新的或“代码>复制总是,并设置<代码>构建动作< /代码>到<代码>无< /Calp>(IIrC默认选项)

您将它放入带有DLL的目录中并引用路径。(相对或绝对)在
dlliport
属性中。你能定义“不工作”?[System.Runtime.InteropServices.DllImportAttribute(“ve.dll”,EntryPoint=“”,CallingConvention=System.Runtime.InteropServices.CallingConvention.Cdecl)]这是对函数的调用,如果不工作,我会得到错误“无法加载”ve.dll“当我运行程序时。据我所知,应该可以工作。您是否在库的生成文件夹中使用dumpbin/exports检查了DLL?或宿主exe?如果您有64位计算机,它将默认为64位应用程序。DLL是32位还是64位?您将它放在带有DLL的目录中,并引用路径(相对或绝对)在
DllImport
属性中。你能定义“不工作”?[System.Runtime.InteropServices.DllImportAttribute(“ve.dll”,EntryPoint=“”,CallingConvention=System.Runtime.InteropServices.CallingConvention.Cdecl)]这是对函数的调用,如果不工作,我会得到错误“无法加载”ve.dll"当我运行程序时。据我所知,应该可以工作。您是否在库的构建文件夹中使用dumpbin/exports检查DLL?或宿主exe?如果您有64位计算机,它将默认为64位应用程序。DLL是32位还是64位?我已经有了,因为它在构建文件夹中,我假设路径不需要任何内容只需输入dll名称。正确。如果它在生成文件夹中,则不应使用路径。您的c#library是否编译为64位?或AnyCpu?以及应用程序?当您说生成文件夹时,您指的是应用程序目录,对吗?不是c#library输出目录我已经有了,因为它在生成文件夹中,我假定路径为d不需要任何额外的东西,只需要dll名称。正确。如果它在构建文件夹中,则不应使用路径。您的c#library是否编译为64位?或AnyCpu?以及应用程序?当您说构建文件夹时,您指的是应用程序目录,对吗?不是c#library输出目录我倾向于将dll添加到项目中(不作为参考,仅作为文件)然后将CopyLocal设置为true。@Jamesbarras本质上是一样的。我相信这可以归结为同样的效果——尽管可能会有一些文件夹的问题。不过,你应该对此做出回答。我会投你一票,因为我忘了这一点。我倾向于将dll添加到项目中(不作为参考,仅作为文件)然后将CopyLocal设置为true。@Jamesbarras本质上是一样的。我相信这可以归结为相同的效果——尽管可能会有一些文件夹问题。不过,你应该对此做出回答。我会投票支持它,因为我忘了这一点。我相信你还需要将构建操作设置为none@Lawtonj94添加后现有项…您没有看到解决方案资源管理器中列出的dll?我相信您还需要将生成操作设置为none@Lawtonj94添加现有项后…您没有在解决方案资源管理器中看到列出的dll吗?
private const string DLLPATH = "MyDLL.dll";

[DllImport(DLLPATH, EntryPoint = "GetDLLStatus")]
public static extern int GetDLLStatus();

[DllImport(DLLPATH, EntryPoint = "SomeOtherFunction")]
public static extern float SomeOtherFunction();