C ++COMdllに関数があります
Write( Const VARIANT *pData);
ここで、VARIANTは構造体タイプです
struct VARIANT
{
unsigned short vt;
unsigned short wReservered;
.....
};
この書き込み関数をC#コードから呼び出す必要があり、多次元配列が関数に渡されます。私は次のようにマーシャリングを行っています..
c++コード
ヘッダーファイル内:
LBE.h
class CLBE
{
public:
__declspec(dllexport) HRESULT __stdcall Write (/*[in]*/ const VARIANT* pData);
}
ここで、VARIANTは構造体タイプです
struct VARIANT
{
unsigned short vt;
unsigned short wReservered;
.....
};
LBE.cpp
extern "C"
{
__declspec(dllexport) HRESULT __stdcall Write (const VARIANT* pData)
{
//impl
}
}
c#コード
namespace abc
public class dataarea
{
[DLLImport("sample.dll",CallingConvention = CallingConvention.StdCall, EntryPoint = "Write")]
public static extern int Write ([MarshalAs(UnmanagedType.Struct)] ref object pData);
.
.
.
public saveobject()
{
object[,] pVariant;
// populating pVariant
object tempVar = pVarriant;
Write(ref tempVar);
}
}
しかし、c#からwrite関数を呼び出すと、「エントリポイント「write」が見つかりません」というエラーがスローされます。この問題を解決できる人はいますか?