Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako da pozovem fju iz ActiveX ...

[es] :: .NET :: Kako da pozovem fju iz ActiveX ...

[ Pregleda: 3287 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Ivan Vasić
Ivan Vasić
Nis

Član broj: 14756
Poruke: 631
*.beotel.net

Jabber: ivasic@elitesecurity.org


Profil

icon Kako da pozovem fju iz ActiveX ...18.07.2004. u 17:53 - pre 210 meseci
Imam ActiveX kontrolu za F Furijeovu transformaciju koja sadrži metod definisan na seleći način (C++) :

Code:
void FFT(BOOL Inverse, unsigned int NumSamples, double* ReIn, double* ImIn, double* ReOut, double* ImOut)


Kako da je pozovem koristeći C# ???

Probao sam ovako nešto:
Code:
double ReIn, ReOut, ImOut; //takodje i sa double[1024]

axFFT.FFT(false, 1024, ref ReIn, null, ref ReOut, ref ImOut);

ali se kompajler naravno buni. (plus ne prihvata null)

Pointeri u ActiveX/u ukazuju na nizove double[NumSamples] (u primeru 1024)

Kako da ovo izvedem ?
 
Odgovor na temu

Ivan Vasić
Ivan Vasić
Nis

Član broj: 14756
Poruke: 631
195.252.85.*

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Kako da pozovem fju iz ActiveX ...19.07.2004. u 20:42 - pre 210 meseci
Daj ljudi sigurno neko zna !

Tata ?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Kako da pozovem fju iz ActiveX ...19.07.2004. u 20:47 - pre 210 meseci
Šta tačno prijavi kompajler?
 
Odgovor na temu

Ivan Vasić
Ivan Vasić
Nis

Član broj: 14756
Poruke: 631
195.252.85.*

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Kako da pozovem fju iz ActiveX ...20.07.2004. u 00:01 - pre 210 meseci
Tačno prijavi :
Citat:
Argument '4': cannot convert from '<null>' to 'ref double'

za "null". To je manji problem jer mogu da postavim neki ref argument koji ne koristim.

Nego evo uopšteno problem:

Kako da referenciram NIZ ? Pošto su mi ReIn, ReOut,ImOut - double a fja iz C++ uzima pointere na nizove dužine NumSamples, kontaš ?

Probao sam sa
double[] ReIn = new doube[1024]; ali onda kompajler izbaci :
Citat:
cannot convert from 'ref double[]' to 'ref double'


Jel moguće opšte ovo nekako da se odradi ili ne ?
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Kako da pozovem fju iz ActiveX ...20.07.2004. u 12:51 - pre 210 meseci
Citat:
[email protected]: za "null". To je manji problem jer mogu da postavim neki ref argument koji ne koristim.


Ne. Stavi IntPtr.Zero umesto null.

E sad, ako ti je u COM-u deklarisano ovako:
Code:

void FFT(BOOL Inverse, unsigned int NumSamples, double* ReIn, double* ImIn, double* ReOut, double* imIn, double* ImOut)


Probaj da deklarises (managed) funkciju ovako:
Code:

public static extern void FFT(bool Inverse, uint NumSamples, ref IntPtr ReIn, ref IntPtr ImIn, ref IntPtr ReOut, ref IntPtr ImOut);


A ulazne nizove inicijalizuj ovako:
Code:

double[] ReIn = new double[1024]; // recimo...
IntPtr buffer1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(double) * ReIn.Length);
Marshal.Copy(ReIn, 0, buffer, ReIn.Length);
// tako i za ImIn, ReOut, ImOut -> buffer2, buffer3 i buffer4
FFT(inv, numSamp, ref buffer1, ref buffer2, ref buffer3, ref buffer4);
Marshal.Copy(buffer3, ReOut, 0, ReOut.Length);
// i sad radis sa ReOut ili sa cim vec oces
...
// na kraju
Marshal.FreeCoTaskMem(buffer1); // itd...


Probaj pa javi, ja nisam probao, samo sam bacio pogled u MSDN (ovde) i "nasvrlj'o" ovo...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

Ivan Vasić
Ivan Vasić
Nis

Član broj: 14756
Poruke: 631
*.beotel.net

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Kako da pozovem fju iz ActiveX ...20.07.2004. u 13:07 - pre 210 meseci
Thnx, havramm. Čim probam javiću kako je ispalo.
 
Odgovor na temu

Ivan Vasić
Ivan Vasić
Nis

Član broj: 14756
Poruke: 631
*.beotel.net

Jabber: ivasic@elitesecurity.org


Profil

icon Re: Kako da pozovem fju iz ActiveX ...20.07.2004. u 14:05 - pre 210 meseci
Ok. U pitanju je bila OCX kontrola pa sam je prepravio u ATL COM i uradio ovo odozgo.
Kompajler se opet pobunio zbog
Citat:
IntPtr buffer1 = Marshal.AllocCoTaskMem(Marshal.SizeOf(double) * ReIn.Length);

i to :
Citat:
Invalid expression term 'double'
totalno glupo.

Inače ako za arg. iskoristim promenljivu (objekat) tipa "double", prolazi. ( Marshal.SizeOf(objDouble) ).

Osim ove sitnice kod prolazi kompajliranje i mislim da je to to. Proveriću samo rezultate kasnije.

U svakom slučaju hvala puno.
 
Odgovor na temu

havramm
Miroslav Havram
Software Developer / Engineer
Beograd

Član broj: 4603
Poruke: 255
212.62.55.*



Profil

icon Re: Kako da pozovem fju iz ActiveX ...20.07.2004. u 16:11 - pre 210 meseci
Moja greska. Prevideo sam da Marshal.SizeOf trazi objekat (object) ili tip (Type) a ne ime tipa. Stara navika iz c++-a...
If it's a girl then they're gonna call it Sigourney, after an actress. If it's a boy, then they're gonna call it Rodney, after Dave!
 
Odgovor na temu

[es] :: .NET :: Kako da pozovem fju iz ActiveX ...

[ Pregleda: 3287 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.