Bonjour,
J'ai une méthode en C dont voici les paramètres :

long indx,long *ArticleNo,long *LineNo,long *Quantity,long *OrderOrReturnNo,BSTR *Barcode,long *TaxType,long *TotalAmount,BOOL *FractionGoods,BOOL *BulkyItem,BOOL *Bargain,BOOL *SubTotPreVoidLine,
BOOL *ReturnItem,BOOL *PayInAdvance

Je dois appeller cette méthode à partir de mon code VB.net...
Ce code C se trouve dans une dll qui a été importée via add reference dans vs2008...

Je l'appelle en VB comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
Dim madll As New RECEIPTCLASSLib.Receipt
Dim ArticleNo As Long, LineNo As Long, Quantity As Long, OrderOrReturnNo As Long
Dim BarCode as string,TaxType As Long, TotalAmount As Long, FractionGoods As Integer
Dim BulkyItem As Integer, Bargain As Integer, SubTotPreVoidLine As Integer
Dim ReturnItem As Integer, PayInAdvance As Integer
 
madll.GetTicketItem(indx, ArticleNo, LineNo, Quantity, OrderOrReturnNo, _
                                          BarCode, TaxType, TotalAmount, FractionGoods, BulkyItem, Bargain, _
                                          SubTotPreVoidLine, ReturnItem, PayInAdvance)
Généralement cela se passe bien mais de temps en temps, je reçoit l'erreur suivante :
Attempted to read or write protected memory. This is often an indication that other memory has been corrupted
Je suis en framework 2.
J'ai désactiver l'optimisation de la compilation dans les paramètres avancé de l'application...
Je n'ai pas accès au code de la dll

Mes questions sont donc :

- Quel est la meilleur façon d'importer ma dll et d'appeller la méthode?
- Est-ce que l'erreur peut venir du fait que ma méthode utilise des pointeurs comme paramètre en référence?
- Est-ce que changer mes déclarations de variables comme suit pourrait résoudre le problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private ArticleNo As IntPtr
    Private LineNo As IntPtr
    Private Quantity As IntPtr
    Private OrderOrReturnNo As IntPtr
    <MarshalAs(UnmanagedType.BStr)> Private BarCode As String
    Private TaxType As IntPtr
    Private TotalAmount As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private FractionGoods As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private BulkyItem As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private Bargain As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private SubTotPreVoidLine As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private ReturnItem As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Private PayInAdvance As IntPtr
 
    <MarshalAs(UnmanagedType.BStr)> Private thehost As String
    <MarshalAs(UnmanagedType.BStr)> Private DateTimeStr As String
    Private PosNo As Int32
    Private TicketNo As Int32
    <MarshalAs(UnmanagedType.Bool)> Private Unique As IntPtr
Je vous remercie d'avance pour toute aide qui me serai apportée.