C# 在C++中使用C DLL 我试图在C++中使用一个C DLL。我开发了一个c动态链接库
我尝试添加它作为C++文件的引用,它显示警告为 无法添加引用 -目标是更高版本的.NET Framework -不是.Net程序集 -不是已注册的ActiveX控件 因此,我在我的c++包装文件中添加了如下所示的dll。我可以访问c dll中的类C# 在C++中使用C DLL 我试图在C++中使用一个C DLL。我开发了一个c动态链接库,c#,c++,dll,C#,C++,Dll,我尝试添加它作为C++文件的引用,它显示警告为 无法添加引用 -目标是更高版本的.NET Framework -不是.Net程序集 -不是已注册的ActiveX控件 因此,我在我的c++包装文件中添加了如下所示的dll。我可以访问c dll中的类 #using <C:\Users\New\Documents\Visual Studio 2015\Projects\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll> usin
#using <C:\Users\New\Documents\Visual Studio 2015\Projects\ClassLibrary1\ClassLibrary1\bin\Debug\ClassLibrary1.dll>
using namespace csharp; //namespace in which managed class is present
#include "Header.h"
extern "C"
{
__declspec(dllexport) int func()
{
managedClass^ r = gcnew managedClass();
someClass^s = gcnew someClass();
s->name = "xyz";
return r->getString(s);
}
}
然后我将包装DLL导入到C++控制台应用程序中,如下:
#include <iostream>
#include <Windows.h>
#pragma comment(lib,"C:\\Users\\New\\Documents\\Visual Studio 2015\\Projects\\C++Wrapper\\Debug\\C++Wrapper.lib")
#include <C:\Users\New\Documents\Visual Studio 2015\Projects\C++Wrapper\C++Wrapper\Header.h>
void main()
{
int result = func();
std::cout << result;
getchar();
}
但我得到的错误如下:
中的0x7479D928 KernelBase.dll处存在未处理的异常
C++ClientPro.exe:0xE0434352参数:0x80070002,0x00000000,
0x00000000、0x00000000、0x73790000
当我尝试使用LoadLibrarylibpath函数加载dll时,我遇到了相同的错误。
当我搜索这个错误时,我知道它无法找到该文件。这一步我错了。在C++中,我必须正确使用C DLL?
编辑
1我已经编辑了我的c++包装文件。我想在c dll中为一个类创建一个实例,并将其作为函数参数传递给同一个dll。
这就是为什么我没有选择另一种方法,在这种方法中,我们只能使用公共接口导出函数,我们无法访问类。
2我在项目中启用了/clr 1使用CCW Com可调用包装器。要使用Register for COM interop标记managedc程序集,请执行以下步骤 第一步。在解决方案资源管理器中选择项目后,在“项目”菜单上单击“属性”。 第二步。单击Visual Basic中的“编译”选项卡。单击C中的Build选项卡。 第三步。选中“为COM互操作注册”复选框 你还可以去别的地方 a 更详细的说明如何从本地Visual C++代码调用/P>调用托管DLL 例如,请参见此处 2使用反向p/Invoke,如下所示
使用反向p/Invoke时,请小心参数的编组。1使用CCW Com可调用包装器。要使用Register for COM interop标记managedc程序集,请执行以下步骤 第一步。在解决方案资源管理器中选择项目后,在“项目”菜单上单击“属性”。 第二步。单击Visual Basic中的“编译”选项卡。单击C中的Build选项卡。 第三步。选中“为COM互操作注册”复选框 你还可以去别的地方 a 更详细的说明如何从本地Visual C++代码调用/P>调用托管DLL 例如,请参见此处 2使用反向p/Invoke,如下所示
使用反向p/Invoke时,请小心编组参数。可能重复-这些链接的可能重复没有帮助。我不知道我是否不知道如何使用它们。我已经编辑了我的问题。链接仍然有用吗?正如你发现的,当你这样做的时候,错误报告是非常糟糕的。您肯定忘了将ClassLibrary1.dll复制到与测试EXE相同的目录中。因此CLR找不到它,0xE0434352是托管异常的异常代码,0x80070002是FileNotFoundException的错误代码。@HansPassant这正是我所犯的错误。谢谢。你救了我。你能把它作为答案分享吗?可能重复-那些链接可能重复没有帮助。我不知道我是否不知道如何使用它们。我已经编辑了我的问题。链接仍然有用吗?正如你发现的,当你这样做的时候,错误报告是非常糟糕的。您肯定忘了将ClassLibrary1.dll复制到与测试EXE相同的目录中。因此CLR找不到它,0xE0434352是托管异常的异常代码,0x80070002是FileNotFoundException的错误代码。@HansPassant这正是我所犯的错误。谢谢。你救了我。你能分享一下答案吗。