Avatar billede akilleuz Nybegynder
05. februar 2015 - 08:03 Der er 5 kommentarer og
1 løsning

C# Array til C++ DLL Function

Hej,

Jeg har et maaske simpelt speorgsmaal men synes ikke rigtig jeg kan finde en loesning.

Jeg har en DLL som er skrevet i C++ som jeg proever at kalde i C#. Dette gaar ogsaa fint, men jeg har problemer med parse et array til en vector.

C++ DLL Header:
DLL_EXPORT void Function1(int ID,const std::vector<double>& Params);

C++ DLL main.cpp
DLL_EXPORT int Function1(int ID,const std::vector<double>& Params)
{
  //Do Something
}


I min C# Function har jeg foelgende kode:
namespace LVRTCall
{   
    public partial class Form1 : Form
    {
        [DllImport("CppFunction.dll", SetLastError = true)]
        public static extern void Function1(int ID, double[] Params);
       
        double[] Params = new double[] { 1, 3, 5, 7, 9 };

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "test";
            int i = Function1(1, Params);
        }
    }
}

Jeg er ret sikkert paa at fejlen ligger i at jeg proever at parse et array til en std::vector i C++?

Det skal lige siges at min CPP DLL fil ogsaa bliver kaldt af et andet CP program og derfor har begraenset muligheder for at aendre i C++ funktionerne - helt klart vil jeg fortraekke ikke at aendre i C++ men derimod aendre i mit C# program.

Haaber noget kan hjaelpe mig i den rigtige retning.

/Thomas
Avatar billede MADOlsen Forsker
05. februar 2015 - 14:57 #1
Avatar billede arne_v Ekspert
05. februar 2015 - 15:24 #2
Kan du ikke lave en ny C++ funktion med double array som du kan kalde fra C# og som stopper data ind i en vector<double> og kalder den gamle C++ funktion?
Avatar billede akilleuz Nybegynder
05. februar 2015 - 15:42 #3
Hej Arne, det har jeg ogsaa gjort indtil videre. Jeg har ogsaa lidt andre problemer med min kode og det er garbage collection og AccessViolation etc.

Jeg taenker lidt paa om jeg skal lave en DLLwrapper til min wrapper hvor jeg kan implementere arrayTovector function etc.?

Kan du event guide mig i den rigtige retning hvad der er bedst?

C#WinForm->CLRCppWrapper.dll->NativeCpp.DLL - Saa taenkte jeg at implementere array2vector i min CLRCppWrapper?

Jeg har nemlig brug for at kunne loade og unloade en min DLL flere gange.
Avatar billede akilleuz Nybegynder
06. februar 2015 - 10:50 #4
Hej Arne,

JEg har nu fundet aarsagen til mit memoryleak, og vil gerne godtage det svar, hvis der ikke finden an anden maade at parse array fra C# til vector c++ uden at skulle aendre i mit c++ kode.

Tak,
Avatar billede arne_v Ekspert
08. februar 2015 - 00:54 #5
Jeg ville bare kopiere fra den ene type til den anden type (array2vector funktion). Det er simpelt og overskueligt.

Og svar.
Avatar billede akilleuz Nybegynder
09. februar 2015 - 14:26 #6
Hej Arne,

"Problemet" ligger i at jeg helst ville undgaa at skulle aendre i min c++ kode. Men jeg tror det er den eneste loesning.

Men tak for input.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester