2017-07-19 4 views
0

Ich habe Probleme bei der Übergabe in einem Array von Zeichenfolgen von meinem C# -Code zu einer Funktion von meinem C++ Dylib.C#: Übergeben String-Array an C++ Dll/Dylib

C# -Code:

[DllImport("array2d.dylib", EntryPoint = "process_array", CallingConvention = CallingConvention.Cdecl)] 
    public static extern int process_array(String[] a, int b); 
    static void Main(string[] args) 
    { 

     String[] list = new String[] { "Abc" , "def", "ghi", "jkl"}; 
     int josh = process_array(list, 2);       
    } 

Meine C++ Code:

#include <string> 
#include <iostream> 



int process_array(char** array, int rows) 
{ 

    std::string s1 ("Array : ["); 

     for (int i = 0; i < 6; ++i){ 
       s1.append(array[i]); 
       s1.append(", "); 

     } 
     s1.append("] \n"); 


     return 1; 

} 

int main() 
{ 

} 

Und die Fehler, die ich habe immer ist:

Unbehandelte Ausnahme: System.EntryPointNotFoundException: Nicht imstande, einen Eintrag zu finden Punkt namens 'Prozess_Array' in der DLL 'array2d.dylib'. bei JoshServer.Program.Process_array (String [] a, Int32 b)

Jede Hilfe wird geschätzt, danke.

+0

Exportiert Ihre cpp-Datei irgendeine Funktion? Es muss einige Schlüsselwörter wie dllexport geben. Lesen Sie über Erstellen von DLLs in cpp. –

Antwort

1

Die Funktion in C++ Programm wird nicht exportiert werden:

int process_array(char** array, int rows) 

Sie müssen es mit dllexport markieren, wie folgt aus:

extern "C" int process_array(char** array, int rows) 

Update: Dieser project enthält die in einem Vortrag verwendet Beispiele Ich habe vor einiger Zeit über PInvoke gesprochen, ich hoffe es hilft.

Einige Korrekturen.

for (int i = 0; i < 6; ++i){ 

Sollte sein:

for (int i = 0; i < rows; ++i){ 

Und

int josh = process_array(list, 2); 

sein sollte
int josh = process_array(list, list.Length); 

Aktualisiert: entfernt __declspec(dllexport) (osx) und hinzugefügt einige Korrekturen.

+0

Ich bin auf einem Mac und der Compiler verrückt, wenn ich das hinzufüge. Von dem, was ich lese, heißt es, es herauszunehmen? https://stackoverflow.com/questions/6838222/correct-way-to-export-a-dll-function-on-mac-osx?rq=1 –

+0

Hallo, Entschuldigung, ich wusste nicht, Sie waren in einem Mac . Würde es Ihnen etwas ausmachen, den externen C-Ausdruck zur Funktion hinzuzufügen? –

+0

Es funktioniert! Vielen Dank –

Verwandte Themen