Я пытаюсь изучить основы связывания неуправляемых C ++ и .NET. Итак, я получил DLL скомпилирован и вызывается из C #. Отлично. Теперь я столкнулся с этой странной проблемой:
Вот мой файл 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();
}
}
}
Достаточно просто. При сборке я получаю ConsoleApp.dll
со стороны C ++ и FancyApp.exe
со стороны C #.
При запуске выдает
Привет, мир 2008 года!
Привет из мира 1986 года!
Нажмите любую клавишу для выхода
как и положено, кроме режима Release от VS2008 (нажмите F5), я получаю
Привет, мир 2008 года!
Нажмите любую клавишу для выхода
Теперь, если я захожу в Проводник и запускаю сборку выпуска FancyApp.exe
без VS, он работает нормально.
Идеи
Я загрузил папку с решениями сюда (180kb).