Hallo Leute!
Ich hab ein Problem: ich habe eine c++ DLL, die ich derzeit mit VB.Net anspreche. Das hat bisher auch gut geklappt, jedoch hat kürzlich MS einen Patch zur clr.dll (.Net Common Language Runtime) rausgebracht, seither stürzt mein Prog sporadisch ab.
Am beste wäre für mich nun, die c++ DLL komplett durch eine .Net Funktion zu ersetzen, da sie eigentlich "nur" die MAPI-Schnittstelle von Outlook anspricht.
Leider tut sie das via einer Funktion, die eine Union voraussetzt - und da hakt es bei mir aus.
Ich habe den Source der c++ Bibliothek da, kann sie auch posten - samt Hintergrundinfos. Leider darf ich nicht den ganzen Code posten, da dort auch Firmeninternas hinterlegt sind. Die eigentliche Kernfunktion sollte aber ausreichen...
Kann mir da bitte jemand helfen? Ich bin da echt komplett aufgeschmissen.
Hier der Code-Schnipsel:
SPropValue SecProp;
LPSPropValue lpSecProp = &SecProp;
SBinary sbCert;
ULONG cbCertBlob = 184;
BYTE lpbCertBlob[184] = {
0x01,0x00,0x08,0x00,0x01,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x01,0x00,
0x00,0x00,0x20,0x00,0x08,0x00,0x07,0x00,0x00,0x00,0x0b,0x00,0x12,0x00, _
0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x53,0x00,
0x22,0x00,0x18,0x00,0x00,0xec,0xec,0xec,0xec,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xec,0x09,0x00,0x18,0x00, _
0xeb,0x95,0x5d,0x7e,0x73,0xef,0x00,0x9c,0x00,0xf0,0x12,0xa4,0x3d,0x00,0x59,0x_
5b,
0x00,0xd2,0xb9,0xec,0x02,0x00,0x5e,0x00,0x30,0x58,0x30,0x0a,0x06,0x08,0x2a,0x86,
0x48,0x86,0xf7,0x0d,0x03,0x00,0x30,0x0e,0x06,0x08,0x2a,0x86,0x48,0x86,0xf7,0x00,
0x00,0x02,0x00,0x02,0x00,0x80,0x30,0x0d,0x00,0x08,0x2a,0x86,0x48,0x86,0xf7,0x0d,
0x00,0x02,0x02,0x01,0x40,0x30,0x07,0x06,0x05,0x2b,0x00,0x03,0x02,0x07,0x30,0x0d,
0x06,0x00,0x2a,0x86,0x48,0x86,0xf7,0x0d,0x00,0x00,0x02,0x01,0x00,0x30,0x00,0x06,
0x05,0x2b,0x00,0x03,0x02,0x1a,0x30,0x0a,0x06,0x00,0x2a,0x86,0x48,0x00,0xf7,0x0d,
0x02,0x05
};
SecProp.ulPropTag = PR_SECURITY_PROFILES;
SecProp.Value.MVbin.cValues = 1;
SecProp.Value.MVbin.lpbin = &sbCert;
SecProp.Value.MVbin.lpbin[0].cb = cbCertBlob;
SecProp.Value.MVbin.lpbin[0].lpb = lpbCertBlob; Und hier der Link zum MS-KB-Artikel, der das ganze beschreibt (leider beherrsche ich kein C++, und der Kollege existiert nicht mehr.....)
http://msdn.microsoft.com/en-us/library/cc815896.aspx
Danke schon mal für Eure Hilfe!!
Mike
PS: sorry, hatte ich vergessen: Ich habe gelesen, dass Unions über einen Trick in VB.Net genutzt bzw. angelegt werden können, aber das "wie" hat sich mir nie erschlossen...
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.fieldoffsetattribute.aspx
Beitrag wurde zuletzt am 08.11.11 um 11:12:51 editiert. |