Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages
Started by Krzysztof
Wed, 03 Dec 2003 12:46
Interop
Author: Krzysztof
Date: Wed, 03 Dec 2003 12:46
Date: Wed, 03 Dec 2003 12:46
31 lines
1938 bytes
1938 bytes
Hi all
pytanie jest konkretnie o mapowanie wywpolan funkcji z DLL napisanego w
VS6.0 (C++)
mam deklaracje metody (funkcji, procedury, cholera jak to nazwac?)
typedef (__stdcall *ExecuteTaskFromXML)( const string& input, string&
output, DWORD& dwSize, LPVOID& pCtx );
string to oczywiscie std::string
prubuje importowac to za pomoca deklaracji:
[DllImport("ExportDll.dll")]
public static extern void ExecuteTaskFromXML(String input, ref String
output, int dwSize, int pCtx);
i dostaje piekny blad NullReference... Oczywiscie "stara" dll-ka nie moze
soibie poradzic z tworzeniem obiektu String output...
Jak to obejsc?
grzebie po dokumentacji i znalazlem opisy (Default Marshaling for Arrays),
ktory posrednio mowi o tym jak mapowac tablice. std::string -> char[] wiec
moze to o to chodzi? przyznam ze deklaracja typu :
([MarshalAs(UnmanagedType. SafeArray, SafeArraySubType=VT_I4)] char[]
output
... jest lekko odpychajaca, by nie powiedziec wiecej...
Czy ktos z was z tym walczyl?
pozdrawiam
Krzysztof
PS. pytanie poszlo rowniez na grupe "anglojezyczna" ...
Re: Interop
Author: Selvin
Date: Wed, 03 Dec 2003 14:04
Date: Wed, 03 Dec 2003 14:04
11 lines
1178 bytes
1178 bytes
<ciach> nie probowalem ale pomocne informacje mozna znalezc tutaj http://www.winterdom.com/mcppfaq/archives/000111.html wprawdzie to C++ale zawsze to cos(mozna napisac w zarzadzalnym C++ biblioteke do konwersji .NET string do stl string) pozdrawiam Przemek Sulikowski
Re: Interop
Author: Pawel Zabza
Date: Wed, 03 Dec 2003 14:24
Date: Wed, 03 Dec 2003 14:24
21 lines
1542 bytes
1542 bytes
Krzysztof wrote: [...] > typedef (__stdcall *ExecuteTaskFromXML)( const string& input, string& > output, DWORD& dwSize, LPVOID& pCtx ); > > string to oczywiscie std::string Marshaller CLR nie rozumie STLowych stringow, tylko BSTR albo LPSTR / LPWSTR. [...] > Jak to obejsc? Jesli ten DLL jest Twoj, to przepisujac go, tak zeby funkcje wolane z C# uzywaly parametrow strawnych dla marshallera. Jesli nie, to piszac "wrapper", ktory bedzie eksportowal takie "strawne" funkcje a sam zajmowal sie konwersja parametrow i wolal te "prawdziwe". Pozdrawiam, Mlodszy interopniczy
Re: Interop
Author: Krzysztof
Date: Wed, 03 Dec 2003 15:12
Date: Wed, 03 Dec 2003 15:12
13 lines
1309 bytes
1309 bytes
> Jesli ten DLL jest Twoj, to przepisujac go, tak zeby funkcje wolane z C# > uzywaly parametrow strawnych dla marshallera. Jesli nie, to piszac > "wrapper", ktory bedzie eksportowal takie "strawne" funkcje a sam > zajmowal sie konwersja parametrow i wolal te "prawdziwe". Nie jest moj a ten wrapper to jak? :) > Pozdrawiam, > Mlodszy interopniczy Krzysztof Brygadzista i mistsz
Re: Interop
Author: Pawel Zabza
Date: Thu, 04 Dec 2003 13:10
Date: Thu, 04 Dec 2003 13:10
19 lines
1805 bytes
1805 bytes
Krzysztof wrote: >>Jesli ten DLL jest Twoj, to przepisujac go, tak zeby funkcje wolane z C# >>uzywaly parametrow strawnych dla marshallera. Jesli nie, to piszac >>"wrapper", ktory bedzie eksportowal takie "strawne" funkcje a sam >>zajmowal sie konwersja parametrow i wolal te "prawdziwe". > > Nie jest moj > a ten wrapper to jak? :) Jesli ma byc na szybko, to DLL w C++, majacy takie same funkcje jak ten istniejacy. Kazda taka funkcja mialaby parametry System::String zamiast std::string i dokonywalaby konwersji przed (i ew. po) wywolaniu funkcji z obecnego DLLa. Jesli ma byc ladnie, to ten wrapper moze byc inteligentniejszy i np. oferowac jakies sensowne klasy, zajmowac sie alokowaniem i zwalnianiem uchwytow etc. - tak zeby uproscic kod klienta. Pozdrawiam, Pawel
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads