奇怪的DLL+;交叉服务问题 我试图学习捆绑非托管C++和.NET的基础知识。因此,我已经编译了DLL,并可以从C#调用它。伟大的现在我遇到了一个奇怪的问题:
这是我的C++文件,<代码>主体.CPP < /代码>:奇怪的DLL+;交叉服务问题 我试图学习捆绑非托管C++和.NET的基础知识。因此,我已经编译了DLL,并可以从C#调用它。伟大的现在我遇到了一个奇怪的问题:,c#,c++,dll,interop,C#,C++,Dll,Interop,这是我的C++文件,主体.CPP < /代码>: #include <stdio.h> extern "C" __declspec(dllexport) void DisplayHelloFromDLL() { printf ("Hello from the World of 1986!\n"); } 很简单。在构建时,我从C++方面获得 COUNSOLAPP.DLL,以及< Cy.< /P> FANCYAPAP.exe < /代码>。 运行时,它会输出 大家好,来自2
#include <stdio.h>
extern "C" __declspec(dllexport) void DisplayHelloFromDLL()
{
printf ("Hello from the World of 1986!\n");
}
很简单。在构建时,我从C++方面获得FancyApp.exe
的发行版,它运行得很好
想法
我已经上传了我的解决方案文件夹(180kb)。我在这里看到了相同的行为,我无法完全解释它。然而,我认为,尝试针对发布版本在调试模式(F5)下运行时,应该会出现未定义的行为。如果我使用ctrl-F5,它会正常运行 由于这是可行的,我们可以推断二进制代码是正确构建的,因此没有编译器问题,但是您看到的是一些奇怪的调试器工件
这可以通过进入FancyApp的属性并在“调试”选项卡上取消选中“启用Visual Studio托管进程”来证明。如果你这样做了,它会像你期望的那样工作。为什么,确切地说,我不能说。这里的教训是不要尝试调试发布版本。因为printf实际上来自C时代,那应该是1970年的世界。:)呵呵。我想,1986年大概是微软推出Windows及其奇特的DLL的时候。
using System; using System.Runtime.InteropServices;
namespace FancyApp {
class Program
{
[DllImport("ConsoleApp.dll")]
public static extern void DisplayHelloFromDLL();
static void Main()
{
Console.WriteLine("Hello form the World of 2008!");
DisplayHelloFromDLL();
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
}