🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages Started by Krzysztof Wed, 03 Dec 2003 12:46
Interop
#273
Author: Krzysztof
Date: Wed, 03 Dec 2003 12:46
31 lines
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
#274
Author: Selvin
Date: Wed, 03 Dec 2003 14:04
11 lines
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
#275
Author: Pawel Zabza
Date: Wed, 03 Dec 2003 14:24
21 lines
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
#276
Author: Krzysztof
Date: Wed, 03 Dec 2003 15:12
13 lines
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
#277
Author: Pawel Zabza
Date: Thu, 04 Dec 2003 13:10
19 lines
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