gpt4 book ai didi

C# : Pass string array to c++ dll/dylib

转载 作者:行者123 更新时间:2023-11-30 05:11:12 27 4
gpt4 key购买 nike

我无法将字符串数组从我的 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:无法在 DLL“array2d.dylib”中找到名为“process_array”的入口点。 在 JoshServer.Program.process_array(String[] a, Int32 b)

感谢任何帮助,谢谢。

最佳答案

您的 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) 并添加了一些更正。

关于C# : Pass string array to c++ dll/dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45192195/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com