我无法将c#代码中的字符串数组传递给我的c ++ 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:无法找到名为&#39; process_array&#39;的入口点。在DLL&#39; array2d.dylib&#39;中。 在JoshServer.Program.process_array(String [] a,Int32 b)
感谢任何帮助,谢谢。
答案 0 :(得分: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)并添加了一些更正。