2つのプロジェクト(C#とManaged C++)があります。 C#プロジェクトはManagedCPPプロジェクトのメソッドを呼び出す必要があります。 c#プロジェクトのリファレンスセクションで、管理されたcpp dllが追加されます。C#からC++/CLIコードを呼び出す
ライン1、2及び3は、コメント解除され、4行目にコメントされている場合は、さらに次のような問題が生じる:
未処理の例外:System.BadImageFormatException
次のようにコードベースです。
C# class:
using System.Runtime.InteropServices;
using ManagedCPP;
namespace CSharp
{
class Program
{
//[DllImport("ManagedCPP")] // Line 1
//public static extern void Convert(); // Line 2
static void Main(string[] args)
{
new Program().CreateObject();
}
private void CreateObject()
{
//Convert(); // Line 3
ManagedCPPEntryClass c = new ManagedCPPEntryClass(); // Line 4
Console.ReadKey();
}
}
}
C++/CLI class(.h):
namespace ManagedCPP
{
public ref class ManagedCPPEntryClass
{
public:
void Convert();
};
}
C++/CLI class(.cpp):
#include "ManagedCPP.h"
using namespace ManagedCPP;
void ManagedCPPEntryClass::Convert()
{
}
ここでは 'BadImageFormatException'のドキュメントを参照してください:http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx –
C#プロジェクトのプラットフォームターゲットを任意のCPUからx86に変更しました。今。しかし、何が問題だった。 C++/cliは、C++/cliプロジェクトのターゲットプラットフォームを設定するオプションがないので、x86にのみコンパイルします。 – Azodious
C/CLIプロジェクトから出力アセンブリへの.net参照を追加し、P/Invokeをそのままにしておくのはなぜですか?あなたはマーシャリングなどを制御しているようには見えません。 –