Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C++中使用C DLL 我试图在C++中使用一个C DLL。我开发了一个c动态链接库_C#_C++_Dll - Fatal编程技术网

C# 在C++中使用C DLL 我试图在C++中使用一个C DLL。我开发了一个c动态链接库

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

我尝试添加它作为C++文件的引用,它显示警告为

无法添加引用 -目标是更高版本的.NET Framework -不是.Net程序集 -不是已注册的ActiveX控件

因此,我在我的c++包装文件中添加了如下所示的dll。我可以访问c dll中的类

#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这正是我所犯的错误。谢谢。你救了我。你能分享一下答案吗。