Forum » Programiranje » [C#] in DLL-ji
[C#] in DLL-ji
ql000 ::
Spet jaz in DLL-ji!
Dll-je, ki vsebujejo funkcije kot so:
primer funckije v C++, ki bi jo rad uporabljal v C#:
V C# kličem ustrezen dll tako (unsafe imam vklopljen):
status dobim v redu, samo vrednost target pa nikakor! Po mojem je finta v definiciji spremenljivk, samo kaj ko nikjer ni varijante FloatPtr :(!
Kake ideje?
Dll-je, ki vsebujejo funkcije kot so:
int TestSum(int input1, int input2)že znam manipulirat, vstavi se mi pa pri funkcijah, ki vsebujejo kazalce.
primer funckije v C++, ki bi jo rad uporabljal v C#:
long ScalarFun(float scalar_input, float *scalar_output), pri čemer funkcija vrne 0, če je vnešena cifra > 0 in -2, če je cifra < 0.
V C# kličem ustrezen dll tako (unsafe imam vklopljen):
[DllImport(@"C:\Documents and Settings\Igor\My Documents\playground\dll\simpledll\Debug\simpledll.dll", EntryPoint = "ScalarFun", ExactSpelling = true, CharSet = CharSet.Ansi)] public static extern Int16 ScalarFun(float input1, out IntPtr input2); static void Main(string[] args) { int Vsota; Int16 status; System.Console.WriteLine("Test 1. DLL funkcije...\n"); Vsota = TestSum(22,99); System.Console.WriteLine("Vsota : {0}", Vsota); System.Console.WriteLine("\nTest 2. DLL funkcije... \n"); IntPtr target = IntPtr.Zero; status = ScalarFun(10000000, out target); System.Console.WriteLine("Vrnjen status: {0}", status); System.Console.WriteLine("Vrnjena vrednost {0}: ", target);
status dobim v redu, samo vrednost target pa nikakor! Po mojem je finta v definiciji spremenljivk, samo kaj ko nikjer ni varijante FloatPtr :(!
Kake ideje?
Kekec ::
poizkusi malo drugace
public static extern long ScalarFun(float input1, out Single input2);
public static extern long ScalarFun(float input1, out Single input2);
ql000 ::
A ima kdo kak link na stran, kjer bi bili ti prehodi, posebej spremembe pri tipih spremenljivk zbrane na enem koncu, v kakšni knjigi,..?
grandioso74 ::
Imam podobno situacijo, kjer je pa zraven še ločen header file. Sicer dobim error
System.EntryPointNotFoundException: 'Unable to find an entry point named 'getSctructSum' in DLL 'ScructureHandler.dll'.'trenutno imam funkcijo vključeno:
[DllImport("ScructureHandler.dll", CallingConvention = CallingConvention.Cdecl)], podpis v C-ju pa je getStructSum(TSruct * struct, int numberOfStruct);.
Človek je sam svoj največji sovražnik.
grandioso74 ::
C++ funkcije morajo biti eksportane kot C.
Saj to je C funkcija
Pa zatipkal si se:
getSctructSum
getStructSum
Mislim, ja ok....ampak ni to fora, VS že javi to.
Človek je sam svoj največji sovražnik.
133127 ::
extern "C" ... sicer bos trpel od dekoracij. Vzami depends (vsaj vcasih si ga dobil zraven visual studia) in poglej dll kot kaj je exportana funkcija.
Razen tega, tisto strukturo TSruct zgoraj bos moral sam interpretirat (je pa res, da ne poznam C#, mogoce se da kaj zmutit z managed C++ funkcijo.
Sicer se pa com objekt iz tega naredi, pa uporabljaj tisto.
Razen tega, tisto strukturo TSruct zgoraj bos moral sam interpretirat (je pa res, da ne poznam C#, mogoce se da kaj zmutit z managed C++ funkcijo.
Sicer se pa com objekt iz tega naredi, pa uporabljaj tisto.
Zgodovina sprememb…
- spremenilo: 133127 ()
grandioso74 ::
__declspec(dllexport) int getStructSum(TSruct * struct, int numberOfStruct);kaj drugega posebnega ni.
.
Človek je sam svoj največji sovražnik.
googleg1 ::
Ce uporabljas c++ compiler moras narediti se extern C. Drugace bos dobil name mangling.
EDIT: Vidim da je ze predhodnik isto komentiral
EDIT: Vidim da je ze predhodnik isto komentiral
Zgodovina sprememb…
- spremenil: googleg1 ()
gozdar1 ::
Plus moraš definirat pravi calling convention bodisi pri exportu bodisi v DllImport atributu.
grandioso74 ::
extern "C" ... sicer bos trpel od dekoracij. Vzami depends (vsaj vcasih si ga dobil zraven visual studia) in poglej dll kot kaj je exportana funkcija.
Razen tega, tisto strukturo TSruct zgoraj bos moral sam interpretirat (je pa res, da ne poznam C#, mogoce se da kaj zmutit z managed C++ funkcijo.
Sicer se pa com objekt iz tega naredi, pa uporabljaj tisto.
Še vedno ne vem, kaj bi lahko
tale error izzvalo?
System.EntryPointNotFoundException: 'Unable to find an entry point named 'getCalculation' in DLL 'Kalkulator.dll'.'Pač vzel sem ene druge funkcije kjer sta parametra, float * array, int length in je isto. dajmo vzeti drugo funkcijo, da bo lažje
Človek je sam svoj največji sovražnik.
Zgodovina sprememb…
- spremenil: ahac ()
acookook ::
Za DLL-e boš najlažje vidu s kakim DLL viewerjem, kot ne npr. dependency walker al pa kakšen DLL export viewer, mogoče celo to https://github.com/lucasg/Dependencies pol pa samo tam prebereš entry point.
.
grandioso74 ::
Sem odprl tale dll in ne boš verjel, funkcija je celo notri.
Nisem še probal sicer jo vključiti. Bomo probali.
Nisem še probal sicer jo vključiti. Bomo probali.
Človek je sam svoj največji sovražnik.
Zgodovina sprememb…
- spremenil: grandioso74 ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c#] naloga za maturo...rabim majhno pomocOddelek: Programiranje | 2357 (1694) | ql000 |
» | C# in slika iz kamereOddelek: Programiranje | 1371 (1255) | ql000 |
» | [C#] Sesutje aplikacijeOddelek: Programiranje | 1645 (1480) | Jean-Paul |
» | [C#] unmanaged->managed codeOddelek: Programiranje | 2160 (2035) | Zzzzzzz |
» | [.NET ali c#] ne najdem dokumentacijeOddelek: Programiranje | 1483 (1329) | atasmrk |