Sup*_*ard 10 c# c++ vb.net string marshalling
所以我有一个用C++编写的函数,看起来像这样......
extern "C" __declspec(dllexport) int __stdcall SomeFunction(char *theData)
{
// stuff
}
Run Code Online (Sandbox Code Playgroud)
...我在我当前的项目中使用它(用C#编写).还有其他项目使用VB编写的这个函数,如下所示:
Public Declare Function SomeFunction Lib "MyDLL.dll" _
Alias "_SomeFunction@4" (ByVal theData As String) As Integer
Run Code Online (Sandbox Code Playgroud)
所以我尝试在C#中编写一个等价物,但发现使用字符串类型对我来说实际上并不起作用 - 字符串会返回我传递给它的相同数据.我尝试使用"ref string"而不是通过引用传递字符串,我得到了内存访问冲突.
在做了一些挖掘之后,我发现这是C#中正确的实现:
[DllImport("MyDLL.dll", EntryPoint = "_SomeFunction@4")]
public static extern int SomeFunction(StringBuilder theData);
Run Code Online (Sandbox Code Playgroud)
现在我知道VB.NET和C#是完全不同的,但我想我总是认为字符串是字符串.如果一种语言能够元帅char*到String隐,为什么不能等,需要一个不同的类共?
(为清晰起见编辑了标题)