[Mono-list] Problems with DllImport attribute and calling libuser32.so

Steinar Herland steinar.herland@gecko.no
Fri, 12 Jul 2002 10:48:15 +0200


This is a multi-part message in MIME format.

------_=_NextPart_001_01C22980.DCC51BBE
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

I'm trying to call the MessageBox function in the WineLib libuser32.so

The attached Class1.cs file works on WinXP (using native user32.dll),
but fails on mono (linux)

I found that if I compile Class1.cs on mono (linux) it does not create
the same method-definition.
There seems to be problems (at least) with the DllImport.CharSet and
DllImport.ExactSpelling attributes.

From my Class1.cs-file:

class Win32Methods{
//mcs & csc il: .method public hidebysig static pinvokeimpl("user32"
ansi)=20
[DllImport("user32",
CharSet=3DCharSet.Ansi,ExactSpelling=3Dfalse,CallingConvention=3DCallingC=
onven
tion.StdCall)]
public extern static int MessageBox(IntPtr hWnd, string text, string
caption, int type);

//csc il: .method public hidebysig static pinvokeimpl("user32" unicode)
//mcs il: .method public hidebysig static pinvokeimpl("user32" nomangle
ansi)=20
[DllImport("user32",
CharSet=3DCharSet.Unicode,ExactSpelling=3Dfalse,CallingConvention=3DCalli=
ngCon
vention.StdCall)]
public extern static int MessageBoxW(IntPtr hWnd, string text, string
caption, int type);

//mcs & csc il: .method public hidebysig static pinvokeimpl("user32"
ansi)=20
[DllImport("user32",
CharSet=3DCharSet.Ansi,ExactSpelling=3Dfalse,CallingConvention=3DCallingC=
onven
tion.StdCall)]
public extern static int MessageBoxA(IntPtr hWnd, string text, string
caption, int type);
}
class Win32Methods2{
//csc: .method public hidebysig static pinvokeimpl("user32" nomangle
ansi)=20
//mcs: .method public hidebysig static pinvokeimpl("user32" ansi)=20
[DllImport("user32",
CharSet=3DCharSet.Ansi,ExactSpelling=3Dtrue,CallingConvention=3DCallingCo=
nvent
ion.StdCall)]
public extern static int MessageBox(IntPtr hWnd, string text, string
caption, int type);
}

-----------------------------
Output running mono on linux:
-----------------------------
** (process:11827): WARNING **: Failed to load function MessageBox from
user32

** (process:11827): WARNING **: Failed to load function MessageBox from
user32
err:heap:HEAP_GetPtr Invalid heap 00000000!
err:heap:HEAP_GetPtr Invalid heap 00000000!
Failure calling Win32Methods.MessageBoxW System.NullReferenceException
A null value was found where an object instance was
requiredSystem.NullReference
Exceptionin (unmanaged) Win32Api.Win32Methods:MessageBoxW ()
in <0x0004a> Win32Api.Class1:Main (string[])

Failure calling Win32Methods.MessageBoxA System.NullReferenceException
A null value was found where an object instance was
requiredSystem.NullReference
Exceptionin (unmanaged) Win32Api.Win32Methods:MessageBoxA ()
in <0x000bf> Win32Api.Class1:Main (string[])

Failure calling Win32Methods.MessageBox System.NotImplementedException
The requested feature is not yet
implementedSystem.NotImplementedExceptionin (un
managed) Win32Api.Win32Methods:MessageBox ()
in <0x00134> Win32Api.Class1:Main (string[])

Failure calling Win32Methods2.MessageBox System.NotImplementedException
The requested feature is not yet
implementedSystem.NotImplementedExceptionin (un
managed) Win32Api.Win32Methods2:MessageBox ()
in <0x001a9> Win32Api.Class1:Main (string[])


------------------------
Output running on WinXP:
------------------------
Failure calling Win32Methods2.MessageBox
System.EntryPointNotFoundException: Unable to find an entry point named
MessageBox in DLL user32.
   at Win32Api.Win32Methods2.MessageBox(IntPtr hWnd, String text, String
caption
, Int32 type)
   at Win32Api.Class1.Main(String[] args) in
d:\dev\steinar\forms\winforms\class
1.cs:line 46
------------------------
This failure is expected because DllImport.ExactSpelling =3D true

Any help appreciated.

Steinar Herland

------_=_NextPart_001_01C22980.DCC51BBE
Content-Type: application/octet-stream;
	name="Class1.cs"
Content-Transfer-Encoding: base64
Content-Description: Class1.cs
Content-Disposition: attachment;
	filename="Class1.cs"

dXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLlJ1bnRpbWUuSW50ZXJvcFNlcnZpY2VzOw0KDQpu
YW1lc3BhY2UgV2luMzJBcGkgew0KCWNsYXNzIFdpbjMyTWV0aG9kc3sNCgkJLy9tY3MgJiBjc2Mg
aWw6IC5tZXRob2QgcHVibGljIGhpZGVieXNpZyBzdGF0aWMgcGludm9rZWltcGwoInVzZXIzMiIg
YW5zaSkgDQoJCVtEbGxJbXBvcnQoInVzZXIzMiIsIENoYXJTZXQ9Q2hhclNldC5BbnNpLEV4YWN0
U3BlbGxpbmc9ZmFsc2UsQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uU3RkQ2Fs
bCldCgkJcHVibGljIGV4dGVybiBzdGF0aWMgaW50IE1lc3NhZ2VCb3goSW50UHRyIGhXbmQsIHN0
cmluZyB0ZXh0LCBzdHJpbmcgY2FwdGlvbiwgaW50IHR5cGUpOw0KCgkJLy9jc2MgaWw6IC5tZXRo
b2QgcHVibGljIGhpZGVieXNpZyBzdGF0aWMgcGludm9rZWltcGwoInVzZXIzMiIgdW5pY29kZSkK
CQkvL21jcyBpbDogLm1ldGhvZCBwdWJsaWMgaGlkZWJ5c2lnIHN0YXRpYyBwaW52b2tlaW1wbCgi
dXNlcjMyIiBub21hbmdsZSBhbnNpKSAKCQlbRGxsSW1wb3J0KCJ1c2VyMzIiLCBDaGFyU2V0PUNo
YXJTZXQuVW5pY29kZSxFeGFjdFNwZWxsaW5nPWZhbHNlLENhbGxpbmdDb252ZW50aW9uPUNhbGxp
bmdDb252ZW50aW9uLlN0ZENhbGwpXQoJCXB1YmxpYyBleHRlcm4gc3RhdGljIGludCBNZXNzYWdl
Qm94VyhJbnRQdHIgaFduZCwgc3RyaW5nIHRleHQsIHN0cmluZyBjYXB0aW9uLCBpbnQgdHlwZSk7
DQoKCQkvL21jcyAmIGNzYyBpbDogLm1ldGhvZCBwdWJsaWMgaGlkZWJ5c2lnIHN0YXRpYyBwaW52
b2tlaW1wbCgidXNlcjMyIiBhbnNpKSAKCQlbRGxsSW1wb3J0KCJ1c2VyMzIiLCBDaGFyU2V0PUNo
YXJTZXQuQW5zaSxFeGFjdFNwZWxsaW5nPWZhbHNlLENhbGxpbmdDb252ZW50aW9uPUNhbGxpbmdD
b252ZW50aW9uLlN0ZENhbGwpXQoJCXB1YmxpYyBleHRlcm4gc3RhdGljIGludCBNZXNzYWdlQm94
QShJbnRQdHIgaFduZCwgc3RyaW5nIHRleHQsIHN0cmluZyBjYXB0aW9uLCBpbnQgdHlwZSk7DQoJ
fQ0KCWNsYXNzIFdpbjMyTWV0aG9kczJ7DQoJCS8vY3NjOiAubWV0aG9kIHB1YmxpYyBoaWRlYnlz
aWcgc3RhdGljIHBpbnZva2VpbXBsKCJ1c2VyMzIiIG5vbWFuZ2xlIGFuc2kpIA0KCQkvL21jczog
Lm1ldGhvZCBwdWJsaWMgaGlkZWJ5c2lnIHN0YXRpYyBwaW52b2tlaW1wbCgidXNlcjMyIiBhbnNp
KSAKCQlbRGxsSW1wb3J0KCJ1c2VyMzIiLCBDaGFyU2V0PUNoYXJTZXQuQW5zaSxFeGFjdFNwZWxs
aW5nPXRydWUsQ2FsbGluZ0NvbnZlbnRpb249Q2FsbGluZ0NvbnZlbnRpb24uU3RkQ2FsbCldCgkJ
cHVibGljIGV4dGVybiBzdGF0aWMgaW50IE1lc3NhZ2VCb3goSW50UHRyIGhXbmQsIHN0cmluZyB0
ZXh0LCBzdHJpbmcgY2FwdGlvbiwgaW50IHR5cGUpOw0KCX0NCg0KCS8vLyA8c3VtbWFyeT4NCgkv
Ly8gU3VtbWFyeSBkZXNjcmlwdGlvbiBmb3IgQ2xhc3MxLg0KCS8vLyA8L3N1bW1hcnk+DQoJY2xh
c3MgQ2xhc3MxIHsNCgkJLy8vIDxzdW1tYXJ5Pg0KCQkvLy8gVGhlIG1haW4gZW50cnkgcG9pbnQg
Zm9yIHRoZSBhcHBsaWNhdGlvbi4NCgkJLy8vIDwvc3VtbWFyeT4NCgkJW1NUQVRocmVhZF0NCgkJ
c3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKSB7DQoJCQlzdHJpbmcgY2FwdGlvbiA9ICJN
eSBjYXB0aW9uIjsNCgkJCXRyeXsNCgkJCQlXaW4zMk1ldGhvZHMuTWVzc2FnZUJveFcoSW50UHRy
Llplcm8sICJNZXNzYWdlQm94VyBPSyIsIGNhcHRpb24sIDApOw0KCQkJfWNhdGNoKEV4Y2VwdGlv
biBleCl7DQoJCQkJQ29uc29sZS5Xcml0ZUxpbmUoIkZhaWx1cmUgY2FsbGluZyBXaW4zMk1ldGhv
ZHMuTWVzc2FnZUJveFcgIiArIGV4LlRvU3RyaW5nKCkpOw0KCQkJfQ0KCQkJdHJ5ew0KCQkJCVdp
bjMyTWV0aG9kcy5NZXNzYWdlQm94QShJbnRQdHIuWmVybywgIk1lc3NhZ2VCb3hBIE9LIiwgY2Fw
dGlvbiwgMCk7DQoJCQl9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCgkJCQlDb25zb2xlLldyaXRlTGlu
ZSgiRmFpbHVyZSBjYWxsaW5nIFdpbjMyTWV0aG9kcy5NZXNzYWdlQm94QSAiICsgZXguVG9TdHJp
bmcoKSk7DQoJCQl9DQoJCQl0cnl7DQoJCQkJV2luMzJNZXRob2RzLk1lc3NhZ2VCb3goSW50UHRy
Llplcm8sICJNZXNzYWdlQm94IE9LIiwgY2FwdGlvbiwgMCk7DQoJCQl9Y2F0Y2goRXhjZXB0aW9u
IGV4KXsNCgkJCQlDb25zb2xlLldyaXRlTGluZSgiRmFpbHVyZSBjYWxsaW5nIFdpbjMyTWV0aG9k
cy5NZXNzYWdlQm94ICIgKyBleC5Ub1N0cmluZygpKTsNCgkJCX0NCgkJCXRyeXsNCgkJCQlXaW4z
Mk1ldGhvZHMyLk1lc3NhZ2VCb3goSW50UHRyLlplcm8sICJNZXNzYWdlQm94IE9LIiwgY2FwdGlv
biwgMCk7DQoJCQl9Y2F0Y2goRXhjZXB0aW9uIGV4KXsNCgkJCQlDb25zb2xlLldyaXRlTGluZSgi
RmFpbHVyZSBjYWxsaW5nIFdpbjMyTWV0aG9kczIuTWVzc2FnZUJveCAiICsgZXguVG9TdHJpbmco
KSk7DQoJCQl9DQoJCQkNCgkJfQ0KCX0NCn0NCg==

------_=_NextPart_001_01C22980.DCC51BBE--