OVH Cloud OVH Cloud

Appel de dll.

1 réponse
Avatar
Pascal
Bonjour,
je cherche à appeler depuis C# une fonction en dll dont la déclaration
en C est la suivante:

I2COpen(hWnd, // Application Window Handle
hALInstance, // Application Instance
&i2c) // I2C Link Property Struct

La structure i2c est de la forme:
i2c.comport = 1;
i2c.WmMsgNo = WM_USER;
i2c.pfCBF = NULL; // Application Callback Function Address.
i2c.pcLogFileName = "log.txt";

Je coince un peu au niveau de la déclaration dans C#:
[DllImport("i2c32200.dll")]
private static extern int I2COpen (...

ensuite comment déclarer la structure et finalement appeler la fonction.

Merci.
PS. Pour me répondre, retirer "france." de l'adresse email

1 réponse

Avatar
Simon Mourier [MS]
Il faudrait la déclaration précise (.h ou .c, .cpp) pour être sûr, mais en
essayant de deviner, ca pourrait être quelque chose comme

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct I2C
{
public int compport; // vérifier que c'est bien un 32bits
public int WmMsgNo; // vérifier que c'est bien un 32bits
public IntPtr pfCBF; // vérifier que comport est bien un pointeur 32bits

[MarshalAs(UnmanagedType.LPWStr)] public string pcLogFileName;
ou
[MarshalAs(UnmanagedType.LPStr)] public string pcLogFileName;
ou

[MarshalAs(UnmanagedType.ByValTStr, SizeConst%6)] public string
pcLogFileName;
ou
[MarshalAs(UnmanagedType.BStr)] public string pcLogFileName;

}

[DllImport("i2c32200.dll")]
private static extern int I2COpen (IntPtr hWnd, IntPtr hALInstance, ref I2C
i2c);


"Pascal" a écrit dans le message de news:

Bonjour,
je cherche à appeler depuis C# une fonction en dll dont la déclaration en
C est la suivante:

I2COpen(hWnd, // Application Window Handle
hALInstance, // Application Instance
&i2c) // I2C Link Property Struct

La structure i2c est de la forme:
i2c.comport = 1;
i2c.WmMsgNo = WM_USER;
i2c.pfCBF = NULL; // Application Callback Function Address.
i2c.pcLogFileName = "log.txt";

Je coince un peu au niveau de la déclaration dans C#:
[DllImport("i2c32200.dll")]
private static extern int I2COpen (...

ensuite comment déclarer la structure et finalement appeler la fonction.

Merci.
PS. Pour me répondre, retirer "france." de l'adresse email