, - , , . (Pardon the Pseudo code Appearance). # ++/CLI.
. ++- ( VS) #?
: # ++, .
:
class __declspec(dllexport) Foo
{
public:
template <typename T> T* getFoo(T* fooData){return fooData;};
};
extern "C" __declspec(dllexport) void call_getFoo(Foo* pFoo, void* pfooData, int fooId)
{
switch(fooId)
{
case(ENUM::1) :
{
pFoo->getFoo((*TypeCast*)pfooData);
break;
}
}
}
internal static class UnsafeNativeMethods
{
const string _dllLocation = "Foo.dll";
[DllImport(_dllLocation)]
static public extern void call_getFoo(IntPtr pFoo, IntPtr pfooData, int fooId);
}
...
...
*YOUR TYPE HERE* myType;
int rawsize = Marshal.SizeOf(myType);
IntPtr pfooData = Marshal.AllocHGlobal(rawsize);
Marshal.StructureToPtr(myType,pfooData,true);
UnsafeNativeMethods.call_getFoo(pFoo, pfooData, fooId);
myType = (*YOUR TYPE HERE*) Marshal.PtrToStructure(pfooData, typeof(*YOUR TYPE HERE*));
...
...
, !