C#应用程序调用64位C/C++;DLL崩溃,但32位版本运行

C#应用程序调用64位C/C++;DLL崩溃,但32位版本运行,c#,c++,vb.net,dll,C#,C++,Vb.net,Dll,我的C/C++DLL是为32位和64位Windows环境构建的。两个在.NET(C#和VB.NET)工作的程序员说,当他们为32位构建客户机时,一切都正常运行。但当它们构建为64位时,运行将以访问冲突结束 我不是.NET程序员,但我可以加载他们的进程并通过C++调试器中的DLL代码。当客户端是我用C++/VCL编写的客户端时,.NET运行肯定会遇到损坏的内存 我的问题是:.NET项目设置中是否有一些特殊的东西用于连接到64位C/C++DLL,这些DLL不同于在32位下工作的DLL 可能相关,但我

我的C/C++DLL是为32位和64位Windows环境构建的。两个在.NET(C#和VB.NET)工作的程序员说,当他们为32位构建客户机时,一切都正常运行。但当它们构建为64位时,运行将以访问冲突结束

我不是.NET程序员,但我可以加载他们的进程并通过C++调试器中的DLL代码。当客户端是我用C++/VCL编写的客户端时,.NET运行肯定会遇到损坏的内存

我的问题是:.NET项目设置中是否有一些特殊的东西用于连接到64位C/C++DLL,这些DLL不同于在32位下工作的DLL

可能相关,但我无法证明:DLL是使用UTF-8/ASCII的字符设置=未设置构建的。我不知道VB.NET客户端是否是为Unicode构建的,但我认为这会产生问题

编辑添加VB.NET、C客户端和C++ DLL

的声明
Declare Function Edit_RunEdits Lib "EDITS50.DLL" (ByVal smfID As Integer, _
                                                  ByVal edit_set_tag As String, _
                                                  ByVal layout_tag As String, _
                                                  ByVal data As String, _
                                                  ByVal edit_options As Integer, _
                                                  ByRef errors_count As Integer, _
                                                  ByVal owner As IntPtr, _
                                                  ByVal callback_func As IntPtr) As Integer
这就是C#宣言:

[DllImportAttribute("EDITS50.dll", EntryPoint = "Edit_RunEdits")]
    public static extern int Edit_RunEdits(int smfID, 
         [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] string edit_set_tag, 
         [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] string layout_tag, 
         [InAttribute()] [MarshalAsAttribute(UnmanagedType.LPStr)] string data, 
         int edit_options, 
         ref int errors_count, 
         System.IntPtr owner, 
         System.IntPtr callback_func);

这是C++的一面:

#define EDIT_API  __declspec(dllexport) __stdcall
extern "C" int EDIT_API Edit_RunEdits( const int smfID, const char* edit_set_tag, 
const char* layout_tag, 
const char* data, 
const int edit_options, 
int* errors_count, 
void* owner, 
void* callback_func);

我相信我可能已经发现了问题所在。该项目是为AnyCPU构建的,但在x64设置下,Prefer32Bit设置为“true”。我要求.NET程序员尝试显式构建x64,并查找和覆盖Prefer32Bit的所有实例(将它们设置为“false”)


谢谢大家的反馈。

很多事情都可能出错-要使这种互操作(.NET到C++)正常工作,一切都必须“恰到好处”。由于您没有描述任何内容,因此除此之外没有什么可说的。除非您解释/展示C#code p/如何准确调用(调用)本机DLL导出的函数,以及如何准确声明这些导出的函数,否则我们只能说:“是的,C代码调用DLL导出的函数的方式有点不对劲……”谢谢。我会请一位程序员(同时在C和C++中工作)提供准确的信息。请参阅上面添加的信息。抱歉……还有一个。我刚刚添加了上面声明的C版本。