- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
#region C++ signatures
//long TRANS2QUIK_API __stdcall TRANS2QUIK_CONNECT (
// LPSTR lpstConnectionParamsString,
// long* pnExtendedErrorCode,
// LPSTR lpstrErrorMessage,
// DWORD dwErrorMessageSize);
#endregion
#region connect
[DllImport("TRANS2QUIK.DLL", EntryPoint = "_TRANS2QUIK_CONNECT@16",CallingConvention = CallingConvention.StdCall)]
static extern long connect(string lpcstrConnectionParamsString,ref long pnExtendedErrorCode,
byte[] lpstrErrorMessage,UInt32 dwErrorMessageSize);
public static void connect_test(bool FinalPause)
{
string path = @"D:\Квики\Quik.ТХБ2007\";
Byte[] EMsg = new Byte[50];
UInt32 EMsgSz = 50;
long ExtEC = 0, rez = -1;
rez = connect(path, ref ExtEC, EMsg, EMsgSz);
Console.WriteLine("test_q.connect_test>\t\t{0} {1} ",rez & 255, ResultToString(rez&255));
//Console.WriteLine(" ExtEC={0}, EMsg={1}, EMsgSz={2}", (ExtEC & 255), EMsg, EMsgSz);
if(FinalPause)Console.ReadLine();
}
#endregion
Юзаем функцию написанную на C++ и возвращающую тип long. После неправильного маршалинга (в C++ long это 32 бита, а не 64) отсекаем лишние биты по AND.