Преобразуйте Матрицу C# в ПЛАВАНИЕ C++*

Я должен получить матрицу SlimMath от C# в управляемый C++ как ПЛАВАНИЕ* максимально чисто. До сих пор все мои попытки были грязны и сломались. Кодекс выглядит примерно так:

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(&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);
}

Я надеюсь, что это имеет достаточно смысла работать с.

Спасибо!

Edit, I forgot to mention that this is working already for strings and regular floats, it's just the float[] -> float* thing I can't seem to get working.

Я был в состоянии получить его прокладывание себе путь, но это не идеально:

unsafe
{
    fixed (float* f = m.ToArray())
        myManagedCPPFunction(f);
}

Предпочел бы не делать это по очевидным причинам.

Хорошо я думаю, что у меня есть он работающий теперь (по крайней мере, это собирает и бежит, но теперь я должен играть с преобразованиями), следующим образом:

void myClass::myManagedCPPFunction(SlimDX::Matrix^ matTransform)
{
     FLOAT* f = reinterpret_cast(&matTransform);
     otherClass->Go(f);
}
1
nl ja de

2 ответы

Это - то, как вы могли сделать, объявляют, что он в C++ применим C# (см. p/invoke обучающие программы):

extern "C" {
    __declspec( dllexport ) void STDMETHODCALLTYPE Go(float* pMatrix);

    void Go(float* pMatrix) {
      //do your stuff here. assume the matrix has 16 elements
    }
}

и в C#:

[DllImport("myDll.dll")]
public static extern void Go(float[] matrix);

Типовой код C#:

Matrix m = myMatrix;
Go(m.ToArray());

Править: если вы используете C++/CLI управляемая сборка, то вы могли объявить функцию как это:

using namespace System;

public ref class Class1
{
    public:

        void Go(array ^ pFloat)
        {
            ... 
        }
    };
1
добавлено
Как у вас может быть эта работа без DllImport? вы делаете COM?
добавлено автор Simon Mourier, источник
О, it' s управляемый проект C++ тогда?
добавлено автор Simon Mourier, источник
Пожалуйста, сделайте этот вид "маленькой детали" ясным в вопросе. Я заставил некоторых отредактировать.
добавлено автор Simon Mourier, источник
Сторона C++ собирает прекрасный, но C# говорит: не может преобразовать из ' плавание [] ' к ' float*'. я не использую DLLImport, просто имею проект C++ в моем решении C# и ссылке там.
добавлено автор FrozT, источник
У меня просто есть проект C++ в моем решении C#, тогда я добавляю ссылку в проекте C#, который связывает два. В том пункте I' m способный вызвать функции в классе обертки C++ непосредственно от C#, я полагаю, что это использует Систему:: Время выполнения:: InteropServices. Все это работает отлично за исключением части матрицы преобразования.
добавлено автор FrozT, источник
Да ===========
добавлено автор FrozT, источник
Я ценю весь ваш совет. эта "маленькая деталь" несколько раз упоминалась всюду по моему вопросу, и я даже назвал свою функцию myManagedCPPFunction.
добавлено автор FrozT, источник

Если это - управляемый С++, можно использовать те же самые типы в качестве в C#. Почему не только объявляют метод C++ как это:

void myClass::myManagedCPPFunction(Matrix^ matTransform)
0
добавлено
Да, хорошо. Я couldn' t получают его работающий прежде как этот тогда, я понял, что должен буду использовать SlimDX:: Matrix^ и это работают. Спасибо!
добавлено автор FrozT, источник
pro.cxx
pro.cxx
3 049 участник(ов)

C/C++ chat 0. Простые вопросы, лабы и о IDE — в чат новичков @supapro 1. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств 2. No Ads, offtop, flood Объявления о вакансиях и евенты - в лс @AlexFails https://t.me/ProCxx/259155

supapro.cxx
supapro.cxx
1 925 участник(ов)

Чат для тех, кто немного знает C++, простые вопросы по реализации, синтаксису и ide – сюда, а для другого есть: /Главный чат по серьезным вопросам — @ProCxx /Чат по обсуждению всего — @fludpac

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

C++ Russia
C++ Russia
384 участник(ов)

Сообщество разработчиков C++ в Telegram.

cxx.Дискуссионная
cxx.Дискуссионная
298 участник(ов)

это не двач, общайтесь вежливо; разговор на почти любые темы; Не согласны с баном? В лс @AlexFails, @ivario

C++ для маленьких и тупых
C++ для маленьких и тупых
105 участник(ов)

Лоу левел (по среднему IQ участников) чатик ExtremeCode @extremecode Флудилка @extremecode_rest