2016-06-14 7 views
1

У меня возникла странная проблема относительно функции, экспортированной из dll с ошибками C++, которую я использую из кода C#: возвращенный bool, полученный на C#, всегда прав, независимо от того, что я верну в C++. Я сузил и получил файл C++, содержащий следующий код:Почему моя функция dllimport всегда возвращает true?

#ifdef __cplusplus 
extern "C" { 
#endif 

    __declspec(dllexport) bool init() 
    { 
     return false; 
    } 

#ifdef __cplusplus 
} 
#endif 

я строй его в DLL и импортировать функции в C#:

using System; 
using System.Runtime.InteropServices; 

namespace Test 
{ 
    class TestDll 
    { 
     [DllImport("dlltest_d")] 
     public static extern bool init(); 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      if(!TestDll.init()) 
      { 
       Console.WriteLine("init failed"); 
       return; 
      } 
      Console.WriteLine("init succeeded"); 
     } 
    } 
} 

Когда я запускаю это, я получаю следующее выход:

INIT удалось

Я очень озадачен. Есть идеи?

ответ

1

boolужасный родной тип. Каждый делает это по-своему. В C# по умолчанию по умолчанию на bool отображается тип BOOL C++, который имеет разные значения, чем ваш bool.

Чтобы указать правильную сортировку, необходимо использовать [return:MarshalAs(UnmanagedType.I1)] и не забудьте использовать соглашение о вызове C.

+0

о, черт возьми. благодаря! – iko79