1

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」が見つかりません」というエラーがスローされます。この問題を解決できる人はいますか?

4

0 に答える 0