アンマネージ Visual C++ ソリューションで C# COM プロジェクトからメソッドを呼び出そうとしていますが、次のエラーが発生し続けます
First-chance exception at 0x7697C41F (KernelBase.dll) in Program.exe: 0x04242420 (parameters: 0x31415927, 0x6F310000, 0x00BBDAE8).
次のコードで
SalesForceNew::IMyObjectClassPtr p;
p.CreateInstance(__uuidof(SalesForceNew::TestObject)); // error
SalesForceNew::MyObject mo = p->getObject(1, "a");
ただし、 の値mo
は期待どおりです (5、「aa」)。
次のコード行で tlb ファイルをインポートします。
#import "C:\Users\Bob\Desktop\ComTest\SalesForceNew\bin\x86\Debug\SalesForceNew.tlb" named_guids
C# プロジェクトは次のとおりです。
インターフェース:
using System.Runtime.InteropServices;
namespace SalesForceNew
{
[ComVisible(true)]
[Guid("22901ACD-CA30-4D3E-B84B-73B707026AE5")]
public interface IMyObjectClass
{
MyObject getObject(int i, string s);
}
[ComVisible(true)]
[StructLayout(LayoutKind.Sequential)]
public struct MyObject
{
public int Getal;
public string Text;
}
}
インターフェースを実装するクラス:
using System.Runtime.InteropServices;
namespace SalesForceNew
{
[ClassInterface(ClassInterfaceType.None)]
[Guid("234A2A35-F270-458D-A67B-C834EB794B27")]
[ComVisible(true)]
public class TestObject : IMyObjectClass
{
public MyObject getObject(int i, string s)
{
return new MyObject() { Getal = i * 5, Text = s + s };
}
}
}
C# COM プロジェクトのオプションRegister for COM interop
とプロパティを確認しました。Make assembly COM-Visible
更新: C# COM プロジェクトのフレームワーク バージョンを 2.0、3.0、または 3.5 に変更すると、エラーは発生しません。フレームワークのバージョンが 4.0 または 4.5 の場合にのみ表示されます。