用dll将c ++结构导入vb

时间:2014-03-16 16:01:27

标签: c++ vb.net string dll struct

我在从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)> _

这些都没有帮助。我需要从结构中读取我的字符串。我在结构中以相同的方式读取整数没有问题。只有这些字符串。你有什么想法吗?

0 个答案:

没有答案