我在从c ++
导入字符串到VB时遇到了麻烦我的结构和导出函数在c ++中声明如下:
struct test
{
LPSTR text;
};
extern "C" __declspec(dllexport) test Func()
{
LPSTR text;
text = (LPSTR) "JUST TESTING";
test str;
str.text = text;
return str;
}
我正在将这个Func()函数导入VB我用这个文本“惊人地”成功了:
<DllImport("dlltest.dll", EntryPoint:="Func", CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function AddFunction() As String
End Function
在这种情况下,AddFunction()返回我在c ++中描述的字符串(“JUST TESTING”) 但是当我尝试在vb中定义我的结构时,我开始遇到问题:
Public Structure test
Public t As String
End Structure
<DllImport("dlltest.dll", EntryPoint:="Func", CallingConvention:=CallingConvention.Cdecl)>
Private Shared Function AddFunction() As test
End Function
在这种情况下,程序每次都会抛出Marshal Directive Exception错误 调用函数AddFunction()
dim A as test
A = AddFunction()
在定义我的测试结构之前,我也试过写这个
<System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)>
在将Public t定义为字符串
之前_<System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.LPStr)> _
这些都没有帮助。我需要从结构中读取我的字符串。我在结构中以相同的方式读取整数没有问题。只有这些字符串。你有什么想法吗?