【发布时间】:2008-12-24 15:44:20
【问题描述】:
我正在尝试学习捆绑非托管 C++ 和 .NET 的基础知识。所以,我已经从 C# 编译和调用了 DLL。伟大的。现在我遇到了这个奇怪的问题:
这是我的 C++ 文件,Main.cpp:
#include <stdio.h>
extern "C" __declspec(dllexport) void DisplayHelloFromDLL()
{
printf ("Hello from the World of 1986!\n");
}
和 C# 文件,Program.cs:
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();
}
}
}
足够简单。构建时,我从 C++ 端获取 ConsoleApp.dll,从 C# 获取 FancyApp.exe。
运行时输出
您好,2008 年的世界!
你好,来自 1986 年的世界!
按任意键退出
应该是这样,除了 VS2008 的发布模式(按 F5),我得到了
您好,2008 年的世界!
按任意键退出
现在,如果我去 Explorer 并在没有 VS 的情况下运行 FancyApp.exe 的发布版本,它运行良好。
想法?
我已经上传了我的解决方案文件夹here (180kb)。
【问题讨论】:
-
既然 printf 真的来自 C 时代,那应该是 1970 年的世界。:)
-
呵呵。我认为 1986 年大约是 Microsoft 提出 Windows 及其精美 DLL 的时间。