2017-07-19 103 views
0

我無法從我的c#代碼中將字符串數組傳遞給函數從我的C++ dylib。C#:將字符串數組傳遞給C++ dll/dylib

C#代碼:

[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);       
    } 

我的C++代碼:

#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() 
{ 

} 

而且我已經得到的錯誤是:

未處理的異常:System.EntryPointNotFoundException:無法找到一個條目在DLL'array2d.dylib'中命名爲'process_array'。 at JoshServer.Program.process_array(String [] a,Int32 b)

任何幫助表示讚賞,謝謝。

+0

您的cpp文件是否導出任何功能?必須有一些關鍵字,如dllexport。閱讀有關在cpp中創建dll的信息。 –

回答

1

在C函數++程序不被出口:

int process_array(char** array, int rows) 

您必須DLLEXPORT標記,就像這樣:

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

更新:此project包含在談話中使用的例子我在前一段時間談到了PInvoke,我希望它有幫助。

一些更正。

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

應該是:

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

而且

int josh = process_array(list, 2); 

應該

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

更新時間:刪除__declspec(dllexport)(OSX),並加入一些更正。

+0

我在Mac上,當我添加它時,編譯器變得瘋狂。從我讀過的東西說要拿出來? https://stackoverflow.com/questions/6838222/correct-way-to-export-a-dll-function-on-mac-osx?rq=1 –

+0

你好,抱歉,我沒有意識到你是在一個mac 。你介意把'extern「C」'表達式加入到函數中嗎? –

+0

它的工作原理!謝謝 –

相關問題