Laden...

Forenbeiträge von et-thomas Ingesamt 7 Beiträge

04.08.2006 - 11:44 Uhr

Hallo zusammen,

ich benötige eine Funktionalität, die mir Ordner mit Unterordnern und Files zusammen packt. Bevor ich mich selber an die Arbeit mache und das Rad neu erfinde, wollte ich fragen, ob jemand soetwas hat - respektive jemand DLL's oder irgendwas aus dem Framework kennt um eine "pack-Funktion" zu realisieren.
MSDN etc. habe ich durchsucht, bin aber nicht fündig geworden.

Vielen Dank im vor raus.

09.02.2006 - 16:16 Uhr

Servus,

ich habe eine ältere c++ dll eingebunden von der ich callbacks erhalte.
die callbacks kommen erfolgreich ohne probleme an. Probleme bekomme ich nur, wenn ich die message (224Bytes) auch auswerten möchte.

ich erweitere in dem Falle einfach die delegate definition um die message.
Prinzipiell funktioniert es auch; ich erhalte dann callback incl. message (message enthält auch sinnvolle daten)...allerdings nur 2 oder 3 mal - ich vermute, das mit die GarbageCollection einen strich durch die rechnung macht ?!?

hat jemand erfahrung mit solchen Problemen? ich weis nun garnicht, wie ich damit weiter vorgehen soll... 🙁

die message habe ich wie folgt angelegt:

 public struct newmsg
        {
            [MarshalAs(UnmanagedType.ByValArray,SizeConst=224)]
            public byte[] msg;
           
        }

des weiteren folgt dann noch delegate

public delegate void VISICall(newmsg test1);
VISICall newCallback = new VISICall(Callback);;

Prinzipiell läufts, aber eben nur 2 oder 3 mal...

Über ein paar Tipps oder einen Hinweis würde ich mich sehr freuen

vielen dank

26.11.2005 - 17:58 Uhr

Hallo

ich möchte eine Funktion aus einer älteren C++ dll aufrufen und habe ein paar Probleme mit den Callbacks.

ConnectDMS(TCHAR *lpszPipename,client *cl,int (*fun_ptr)(comm *msg));
--->
//ConnectDMS(TCHAR *lpszPipename,client *cl,int (*fun_ptr)(comm *msg));
[DllImport("c:\\promos13\\bin\\pmospipe.dll", EntryPoint = "ConnectDMS", CharSet=CharSet.Ansi, SetLastError=true, ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
public static extern unsafe int ConnectDMS(string strname, ref client cldms, _CSharp_Klassenentwicklung.Form1.Callbacks cb);
	

Der letzte Parameter gibt bei mir nun die Funktion (mit delegate) an, die bei Message ausgeführt werden soll. Übergabe für diese Funktion ist *msg.
Die Struktur für *msg habe ich nach Doku richtig angelegt.

In der Doku der dll-Funktionen steht, das die Funktion mit cdecl angelegt ist und deswegen vorsicht geboten sei in anderen sprachen neben c++.

Problem ist nun, das die Messages nicht ankommen, also das Programm nicht reagiert - und das rufende (also message sendende) Programm hängen bleibt solange mein Programm verbunden ist.

Vielleicht hat jemand einen Hinweis für mich -> bzw. verweis im Internet wo das Thema behandelt wird. Habe mich schon umgesehen aber nicht wirklich etwas gefunden.

17.11.2005 - 10:53 Uhr

Ja; es ist das gleiche. Aber das kann ich nur machen, nachdem ich eh schon Speicher, bzw. die Struktur inintiiert habe.

Würde das gern direkt in der Struktur anlegen...

17.11.2005 - 10:18 Uhr

Hallo zusammen,

ich habe eine größere Struktur, die auch Arrays enthält in VB bzw. C++.

Diese möchte ich nun nach C# portieren. Hat da jemand eine Idee, wie ich das prinzipiell machen kann? Ich habe einfach eine neue Struktur angelegt und dort die Variablen aufgelistet, natürlich die größe angepasst (aus short wird int etc.). Einziges Manko habe ich nun bei den byte Arrays...Da weiß ich nicht, wie ich in der Struktur 63Bytes hintereinander bekomme - byte[] mybyte[63] geht in c# ja leider nicht...

16.11.2005 - 09:05 Uhr

Hallo

Danke für die Rasche Antwort. StringBuilder hatte ich auch schon probiert - Ohne Erfolg!

16.11.2005 - 08:44 Uhr

Hallo zusammen,

ich möchte eine ältere C++ DLL in C# einbinden. Eigentlich kein großes Problem, aber es funktioniert in der Umsetzung leider nicht. Ich bin mir nicht sicher, ob ich die richtigen Datentypen nehm. Vielleicht könnt ihr mal drüber schauen:

c++.dll Header schaut wie folgt aus.


int _stdcall Connect(TCHAR *lpszVar, HANDLE& base);
int _stdcall Read (HANDLE base, TCHAR *entry, tSTR* value);

Mein DLLImport schaut in C# nun so aus.


[DllImport("c:\\base.dll", EntryPoint = "Connect")]
public static extern unsafe int Connect(string myVar, IntPtr mybase);

Den IntPtr lege ich mit Marshal.AllocCoTaskMem an, das scheint so zu funktionieren - mit dem TCHAR bin ich mir jedoch unsicher....