1

管理されていない 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)、画像に示されている例外が発生します。

ここに画像の説明を入力

例外の原因を理解できません。コードの出力は問題ありませんが、Visual Studio 2012 Express を使用して実行すると、上記のエラーが発生します。

本番でも使用したサンプルコードですが、今後問題が発生する可能性があります。

例外を取り除く方法はありますか。

ありがとう。

4

1 に答える 1

1

次のように宣言する必要がありますbUnmanagedType.LPStr

Declare Sub Only Lib "dllproj2.dll" Alias "Only" (<InAttribute(), MarshalAs(UnmanagedType.LPStr)> b As StringBuilder)
于 2013-10-18T06:13:14.283 に答える