C#调用C++的动态库报错

C#调用C++的dll一直报错,应该是类型不匹配,有没有大佬指点一下?
C++ code:

img

img

C# code:

img

img

img

img

参考GPT和自己的思路:

根据你提供的代码和描述,可能的问题有以下几点:

  1. C++动态库的声明和定义不匹配

在C++动态库中声明和定义的函数需要和C#代码调用时的参数类型和返回类型一致,否则会报类型不匹配的错误。可以检查一下C++动态库的声明和定义以及C#代码中调用的参数类型和返回类型是否匹配。

  1. 字符串编码不匹配

在C++动态库中使用的字符串编码和C#代码中使用的字符串编码需要保持一致,否则会导致字符串乱码或者无法识别的情况。可以在C#代码中指定正确的字符串编码来解决这个问题。

  1. dll文件路径错误

在C#代码中指定的dll文件路径是否正确,需要确保指定的路径能够找到对应的dll文件。可以使用绝对路径或者相对路径来指定dll文件的位置。

建议在调试时可以先把C++动态库和C#代码分别单独测试,可以通过在C++动态库中加入一些Debug打印信息和在C#代码中使用调试器来帮助定位问题。同时也可以搜索一下报错信息,看看能否找到相关的解决方案。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的信息,可能的原因是C++和C#之间的数据类型不匹配导致的访问冲突。您可以尝试使用MarshalAs属性为传递给C++函数的字符串和结构体类型指定正确的数据类型。
·
另外,您可以使用调试器检查哪个变量或哪一行代码导致了访问冲突的错误。这有助于您更好地理解问题的本质。
·
最后,您可以查看C++函数的定义并确保传递给它的参数类型和顺序与其期望的参数类型和顺序完全相同。

pos_str 这个类型是什么?贴出看看