c# - 将字符串数组从 C# 应用程序传递到 C++ DLL

标签 c# c++

string []URL = {"www.facebook.com","www.orkut.com","www.yahoo.com"};
            Int32 result = URL.Length;
            SetPolicyURL( URL,result );

这是我的 C# 代码,我试图将字符串数组传递给像这样导入的 C++ Dll

     [PreserveSig]
    [DllImport("PawCtrl.dll", SetLastError = true, CharSet = CharSet.Auto,  CallingConvention = CallingConvention.StdCall)]
    public static extern void SetPolicyURL( string []policy, Int32 noURL);

但我无法在我的 C++ DLL 中接收它。

 PAWCTRL_API void __stdcall SetPolicyURL( char ** URLpolicy, __int32 noURL)
 {

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

    URLvector.push_back(URLpolicy[i]);
  }
 }

谁能帮我解决这个问题

先谢谢了

最佳答案

CharSet = CharSet.Auto 是错误的,它必须是 CharSet.Ansi 才能与 native 代码中的 char* 兼容。如果仍然遇到问题,请使用启用了非托管调试的调试器,在函数的第一条语句上设置断点。

同样drop [PreserveSig],这里没有意义。并且 SetLastError 很可能是错误的,这只是典型的 Windows api 函数。

关于c# - 将字符串数组从 C# 应用程序传递到 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429521/

相关文章:

c# - 调用堆栈上的条件断点

c++ - Winsock2 - 如何在客户端使用 IOCP

c++ - 与 ‘operator<<’ 不匹配(操作数类型为 ‘std::ostream’ {aka ‘std::basic_ostream<char>’ } 和 ‘const std::type_index’ )

c++ - 集中创建对象供以后使用

c# - 使用 SQLite-Net Extensions 和 OneToMany 关系

c# - 使用 Trusted_Connection=true 和 SQL Server 身份验证时,这会影响性能吗?

c# - 将 zip 文件编码为 Base64

c# - 在实现内部可读/可写的只读接口(interface)属性

c++ - 自定义字节大小?

c++ - Sonarqube c++ 语法错误跳过 __namespace