C# からマネージ C++ に SlimMath 行列をできるだけきれいに FLOAT* として取得する必要があります。これまでのところ、私の試みはすべて汚れていて壊れています。コードは次のようになります。
C#
Matrix m = Matrix.Identity;
//.......(transform matrix)
//.......Convert it to something I can get into c++ ??
myManagedCPPFunction(m.ToArray());
c++
void myClass::myManagedCPPFunction(?? matTransform)
{
//FLOAT* f = reinterpret_cast<FLOAT*>(&matTransform); //Cant do this cause managed code
otherClass->Go((FLOAT*)matTransform);
}
//This is existing code I'm trying to get to:
class otherClass
{
public:
virtual void STDMETHODCALLTYPE Go(const FLOAT *pTransformMatrix);
}
一緒に仕事をするのに十分な意味があることを願っています。
ありがとう!
編集、これはすでに文字列と通常のフロートで機能していることを忘れていました。これは、float[] -> float* だけでは機能していないようです。
この方法で動作させることができましたが、理想的ではありません:
unsafe
{
fixed (float* f = m.ToArray())
myManagedCPPFunction(f);
}
明らかな理由から、それをしないことをお勧めします。
OK、次のように動作していると思います(少なくともコンパイルして実行しますが、変換を試す必要があります):
void myClass::myManagedCPPFunction(SlimDX::Matrix^ matTransform)
{
FLOAT* f = reinterpret_cast<FLOAT*>(&matTransform);
otherClass->Go(f);
}