[ nix_r @ 25.04.2006. 13:47 ] @
Imam veliki problem i hitnoooooo mi treba pomoc. Naime iz C# metode se poziva metoda u C++ kojoj se kao argument dodjeljuje CoreObject co (to je objekat-poruka za SMSC sa odgovarajucim svojstvima, a jedan od njih je text poruke co.UD kao byte[] u ASCII formatu).

Metoda u C++ koristi managed i unmanaged tipove i dio je klase public _gc class BulkInsert

Imam dati dio koda u C++:

BOOL BST_Core::BulkInsert::BindData(CoreObject *co)
{
BYTE* UD = new BYTE[164]; //...unsigned char array
UD = co->UD; //...co->UD je niz bajta iz C#



if (bcp_bind(dbproc, (BYTE*)UD, 0, -1, (BYTE*)"", 1, 0, 17) == FAIL)
{
return FALSE;
}


Moram paziti na ovaj format (BYTE*)UD, jer samo tako ga mogu proslijediti fiji bcp_bind, koja salje red odgovarajucoj koloni u SQL Server-u 2000, cija je kolona tipa BINARY u koju se upisuje text SMS poruke.
Prakticki ja trebam kopirati sadrzaj byte[] array-a co.UD iz C++ u ovaj niz BYTE *UD = new BYTE[164], vodeci racuna da se mixa manaded i unmanaged code.

Kada izbildam projekat, dobijem sljedecu poruku
e:\SMSC_version\FIN-2006-04-20-SMC_2_Uskladjena\BulkInsert\BulkInsert.cpp(320): error C2440: '=' : cannot convert from 'unsigned char __gc[]' to 'BYTE *'
Can only convert a __gc array to or from Object * or Array *
[ logic_rabbit @ 25.04.2006. 13:51 ] @
Ocito imas problema u konverziji tipova podataka:-)
[ Dragi Tata @ 25.04.2006. 14:06 ] @
Umesto da radiš ovo:

Citat:
nix_r:
UD = co->UD; //...co->UD je niz bajta iz C#


Jednostavno iskopiraj bajt po bajt iz co->UD u UD.

Takođe, obrati pažnju da li zoveš delete[] UD u svakom mogućem slučaju da ne bi imao memory leak. Recimo, ovo mi je jako sumnjivo:

if (bcp_bind(dbproc, (BYTE*)UD, 0, -1, (BYTE*)"", 1, 0, 17) == FAIL)
{
return FALSE;
}
[ Dragi Tata @ 25.04.2006. 14:08 ] @
Kad bolje razmislim, zašto uopšte pišeš

Code:
 BYTE* UD = new BYTE[164]; //...unsigned char array


Bezbednije i lakše je:

Code:
 BYTE UD[164]; //...unsigned char array