c# in dll

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

c# in dll

OdgovorNapisal/-a s54mtb » 28 Sep 2017, 12:27

Imam dll in "c" header zanj. Solution explorer ga ne zna importat, zato sem to določil "ročno", npr:

Koda: Izberi vse
const string DllFileName = "X:\\tmp\\mydll.dll";
        [DllImport(DllFileName)] public static extern long OpenDriver(long lVer);
        [DllImport(DllFileName)] public static extern long Preveri(long handle);


DLL je x86, v build target sem dodal x86, poganjam sicer v x64 win7.

Ob klicu katerekoli funkcije se sproži PInvokeStackImbalance. To sem sicer odpravil s tem, da odkljukam opcijo PInvokeStackImbalance v "Managed Debugging Assistants". Kak nasvet, kako to odpraviti manj "šalabajzersko" ?
s54mtb
 
Prispevkov: 6521
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 873 krat
Prejel zahvalo: 2043 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 2

Re: c# in dll

OdgovorNapisal/-a Kroko » 28 Sep 2017, 12:50

MDA ni napaka ampak pomočnik, ki ti pomaga najti problem. V release verziji je izklopljen.

Poglej, kako imaš definiran calling convention v tvojem dll-u. DllImport ima za privzeto CallingConvention.WinApi oziroma CallingConvention.StdCall, lahko pa da je tvoj dll CallingConvention.Cdecl.
http://www.planet-cnc.comKroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 3279
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 584 krat
Prejel zahvalo: 1087 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 197


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost