Bonjour,

Je veux accéder à une simple fonction d'une DLL C++. Voici la déclaration du fichier .h concernant cette fonction:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
#define API_SPEC     __declspec(dllexport)
void API_SPEC API_getApiVersion (std::wstring *version) //[out] API release ID
Donc le paramètre de cette fonction est un pointeur vers une string qui contiendra le texte indiquant le numéro de version. Mon code VB.Net pour y accéder est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Public Class Form1
    <DllImport("C:\Api.dll", EntryPoint:="?API_getApiVersion@@YAXPAV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@@Z", CallingConvention:=CallingConvention.ThisCall, CharSet:=CharSet.Unicode)> _
    Public Shared Sub test(ByVal version As String)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim laVersion As String = New String(" "c, 20)
        Call test(laVersion )
        MessageBox.Show(laVersion)
    End Sub
End Class
À l'exécution j'ai un message
AccessViolationException was unhandled.
J'ai essayé de passer ma variable 'version' en ByRef au lieu de ByVal mais ça ne règle rien. J'ai aussi essayé de passer un type StringBuilder au lieu du type string mais sans résultat.

Qu'est-ce que je fais de pas correct?

Merci