使用C++;C#项目中的DLL 我得到了一个C++的DLL,它必须集成在一个C项目中。

使用C++;C#项目中的DLL 我得到了一个C++的DLL,它必须集成在一个C项目中。,c#,c++,dll,dllimport,C#,C++,Dll,Dllimport,我想我找到了正确的方法,但是调用dll会产生以下错误: System.BadImageFormatException:试图加载格式不正确的程序。(HRESULT的异常:0x8007000B) 这是dll中的函数: extern long FAR PASCAL convert (LPSTR filename); 这就是我在C语言中使用的代码# 关于如何进行这项工作有什么想法吗 非常感谢, Frank尝试将C代码从任何CPU切换到x86(在属性对话框中)。导出的函数使用PASCAL调用约定,该约定

我想我找到了正确的方法,但是调用dll会产生以下错误: System.BadImageFormatException:试图加载格式不正确的程序。(HRESULT的异常:0x8007000B)

这是dll中的函数:

extern long FAR PASCAL convert (LPSTR filename);
这就是我在C语言中使用的代码#

关于如何进行这项工作有什么想法吗

非常感谢,
Frank

尝试将C代码从任何CPU切换到x86(在属性对话框中)。

导出的函数使用
PASCAL
调用约定,该约定在Windows中与
stdcall
相同。Net运行时需要知道这一点,因此请按如下方式修改您的C#方法签名:

[DllImport("convert.dll", SetLastError = true, CallingConvention=CallingConvention.StdCall)]
static extern Int32 convert([MarshalAs(UnmanagedType.LPStr)] string filename);

尝试在从DLL导出的函数中使用
\uu stdcall
(或
WINAPI
apitery

<强> 1——创建C++ dll <强> < /p> 在VisualStudio中

**New->Project->Class Library** in c++ template Name of project here is first_dll in visual studio 2010. Now **declare your function as public** in first_dll.h file and write the code in first_dll.cpp file as shown below.

第一个_dll.dll文件是在调试文件夹中创建的

2-将其链接到C#项目中

开放式C#项目

在C#项目的顶部添加此行

现在,可以在某些函数中使用下面的语句访问该文件

double var = Class1.sum(4,5);

< >我将VS2010中创建的C++项目DLL链接到VS2013中创建的C项目。它工作得很好

同样的结果。。。System.BadImageFormatException:试图加载格式不正确的程序。(来自HRESULT:0x8007000B的异常)@Frank:Exception指向DLL和C#代码中的x86/x64不匹配。如果C++代码编译为X64,尝试将C代码也设置为X64(反之亦然,如果代码是x86)。在处理DllImport时,这是导致该异常的唯一原因(根据Microsoft文档-)。第一行中有太多的错误,因此删除了以下内容:[DllImport(“convert.dll”,SetLastError=true,CallingConvention=CallingConvention.StdCall)]静态外部Int32 convert([Marshals(UnmanagedType.LPStr)]字符串文件名);但仍然存在相同的错误System.BadImageFormatException:试图加载格式不正确的程序。(HRESULT的例外情况:0x8007000B)请提供有关平台、项目设置和所用DLL的更多详细信息。(架构x86/x64等)我必须使用dll“原样”。。。不允许更改在不同的头文件中(也在WinDef.h中)有不同的PASCAL声明,但是
\uu stdcall
的dierct用法将以相同的方式解释way@Frank:哦!DLL不是源于您的代码,可能DLL有另一种格式,如64位等?您可以使用Visual Studio或dependencywalker www.dependencywalker.com中带有/headers参数的dumpbin.exe来查看有关dllpffff的详细信息。。。dependency walker显示:错误:至少有一个文件不是32位或64位Windows模块,未找到PE签名。此文件似乎是一个16位Windows模块。我可能错了,但这看起来不太好。。。
Check **Project-> Properties -> Configuration/General -> Configuration Type** 
this option should be **Dynamic Library(.dll)** and build the solution/project now.
Rightclick on project name in solution explorer -> Add -> References -> Browse to path
where first_dll.dll is created and add the file 
Using first_dll; 
double var = Class1.sum(4,5);