COM Array – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

COM Array – .NET – Fórum – Programujte.comCOM Array – .NET – Fórum – Programujte.com

 

Pawl
~ Anonymní uživatel
29 příspěvků
18. 5. 2010   #1
-
0
-

Ahoj,

Komponenta je COM je definována jako :

...

[DispId(1610809425)]
bool ReadDirectResults(ref int ReadCode, ref Array BufferImg, ref Array VarResults);...
...



moje implementace

	    

Array data = new byte[200];
Array dataa = new byte[200];
int banka = 2;
int x = dev.DeviceCFG.Size_X;
int y = dev.DeviceCFG.Size_Y;
dev.ReadDirectResults(ref banka,ref data,ref dataa);


An unhandled except, ion of type 'System.Runtime.InteropServices.SafeArrayTypeMismatchException' occurred in
Additional information: Specified array was not of the expected type.

Četl jsem něco o Marshalingu, o SAFERARRY ale nevim jak to definovat v c#.

Pavel

Nahlásit jako SPAM
IP: 85.207.218.–
liborb
~ Redaktor
+18
Guru
18. 5. 2010   #2
-
0
-

Marshaling je způsob předávání parametrů mezi procesy. SAFEARRAY je jeden z automation typů, který se používá. Je v něm uloženo víc informací: délka, typ, meze .... Pokud se nepletu, tak C# předává každé pole COM komponentě jako SAFEARRAY. Ale otázka je, jestli to má být pole bajtů. Nemá to být jiný datový typ?

Nahlásit jako SPAM
IP: 195.189.143.–
pawl
~ Anonymní uživatel
29 příspěvků
19. 5. 2010   #3
-
0
-

To liborb :

Když jsem se nechal V C++ automaticky vytvořit knihovnu dostal jsem toto:
BOOL ReadDirectResults(long * ReadCode, SAFEARRAY * * BufferImg, SAFEARRAY * * VarResults) { ... }

dokumentace k těmto třídám je mizerná.
--
Podobná funkce která obsahuje ARRAY je ukazana v příkladu psaný ve VB6



'Declare image array for buffered images
Private imageArray() As Byte
...
imgWidth = 400
imgHeight = 330
ReDim imageArray(imgWidth * imgHeight
...
'Read buffered image (return true if read)
With objDevs(DeviceIndex)
Result = .ReadImage(imageArray, ImageBank, imgWidth, imgHeight, 0)
End With


definice v C# to funguje zvlašteně (možná je to v pořátku)
...

Array dataa = new byte[200];
dev.ReadImage(ref data, banka, ref x, ref y, ref dummy);


podle X a Y se mě změní velikost pole. Ale chybu to nevypíše, sice všechny bajty mají hodnotu 0, ale mlže být jiný problém. V C++ jsem to ještě nezkoušel.



BOOL ReadImage(SAFEARRAY ** BufferImg, long NumImage, long * SizeX, long * SizeY, long * TypeImage)

kde buffer je definován stejně jako ve funkci ReadDirectResults.

Nahlásit jako SPAM
IP: 85.207.218.–
liborb
~ Redaktor
+18
Guru
19. 5. 2010   #4
-
0
-

Jasně, u BufferImg bych ten byte i bral. Ale to druhé pole - VarResults - by mohl být třeba typu SCODE (HRESULT, 32bit unsigned), nebo-li VT_ERROR (http://msdn.microsoft.com/en-us/library/ms891678.aspx). Ono těch možností moc není, můžeš je všechny vyzkoušet :smile1: . Jestli je ta špatná dokumentace na webu, tak sem dej odkaz - třeba z toho něco vykoukám.

Nahlásit jako SPAM
IP: 85.207.166.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

$a[], [], array[] — založil Rudolf

Array — založil Martin

Array — založil Row

Array of array of array — založil Yuffie

Problem s array — založil jozo0025

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý