在VB.Net中使用C ++ DLL时获取异常

时间:2013-10-18 05:56:04

标签: c++ .net vb.net exception interop

我创建了非托管dll并在VB.Net中使用。

两个代码都是如下所示。

VB.Net

Imports System.Text
Imports System.Runtime.InteropServices

Module Module1

    Sub Main()
        Dim c As cls = New cls()
        c.Start()
    End Sub

End Module

Public Class cls
    Declare Sub Only Lib "dllproj2.dll" Alias "Only" (b As StringBuilder)

    Public Sub Start()
        Dim s As StringBuilder = New StringBuilder(15)

        Only(s) '**Actual call to dll code **
        Dim s1 As String = s.ToString.ToLower
        Dim len As Integer = s.ToString.Length.ToString()
        Console.Write(s.ToString())
    End Sub

End Class

C ++ dll

#include<stdio.h>
#include<stdlib.h>
#include<cstring>

extern "C"{
void Only(char *a)
{
    char arr[10];

    printf("Reached");
    sprintf(arr,"This %d",33);
    printf("\n%s\n",arr);
    memcpy(a,arr,10);

}
}

现在,只要我访问第Only(s)行,就会在图片中显示异常。

enter image description here

我无法理解异常原因。代码的输出很好,但是在使用Visual Studio 2012 Express运行它时会出现上述错误。

这是示例代码,我们也在生产中使用,我担心将来可能会引起问题。

请建议有什么方法可以摆脱异常。

感谢。

1 个答案:

答案 0 :(得分:1)

您必须将b声明为:UnmanagedType.LPStr

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (<InAttribute(), MarshalAs(UnmanagedType.LPStr)> b As StringBuilder)