Datentypen in DLLs

chriss_2oo4

Erfahrenes Mitglied
Hi,

ich habe vor einiger Zeit schonmal einen Thread gestartet in dem es darum ging, wie ich allgemein nutzbare DLLs (also beispielsweise auch in c) erzeugen kann.

Nun bin ich dabei diese DLL zu verbessern und ich bin mir nicht sicher, welche Datentypen in DLLs eingesetzt werden sollten.

Gibt es vielleicht "allgemein gültige Datentypen für DLLs" , weil eine DLL macht ja eigentlich nur Sinn, wenn ich weiss welche Datentypen übergeben werden müssen? Beispielsweise ist long zum Teil 32 Bit lang (aus den 16Bit Zeiten) und heutzutage ist long 64 Bit lang...

Wie kann ich ein String Array mit beliebiger länge übergeben? -> ich möchte meiner Methode beliebig viele Filter in Form von Strings (const char*) übergeben können.


Gruß Chriss
 
Zuletzt bearbeitet:
Hi

1: ein long ist doch gar nicht 64bit lang, sondern 32 wie immer
für 64 bit brauchst du __int64

2: Wie meinst du das eigentlich, der DLL etwas übergeben?
Normalerweise übergibt man nur Funktioenen etwas...

3: Wenn die Funktion ein char * entgegen nimmt (mit oder ohne const)
ist es eigentlich für die Funktion egal wieviel Byte der String hat, es wird eigentlich nur die Adresse vom ersten Buchstaben übergeben

Gruß
 
Hi,

erstmal Danke für deine Antwort

ein long ist doch gar nicht 64bit lang, sondern 32 wie immer
für 64 bit brauchst du __int64

In C# beispielsweise ist long 64 Bit lang -> die dll soll auch in c# eingesetzt werden und dazu müsste man wissen, dass long in C# != long in C++ ist.

Wie meinst du das eigentlich, der DLL etwas übergeben?
Normalerweise übergibt man nur Funktioenen etwas...

War vielleicht etwas unglücklich formuliert-> natürlich möchte ich den Funktionen meiner dll die Werte übergeben.

3: Wenn die Funktion ein char * entgegen nimmt (mit oder ohne const)
ist es eigentlich für die Funktion egal wieviel Byte der String hat, es wird eigentlich nur die Adresse vom ersten Buchstaben übergeben

Ja, das stimmt hat aber nicht wirklich was mit meiner Frage zu tun, ein String (char*) ist ja ein Zeiger auf das erste Zeichen im String und endet mit \0. Ich war mir nicht sicher wie ich ein Array von Strings (nicht ein Array von Zeichen) übergeben kann?

Gruß Chriss
 
Hi.
1: ein long ist doch gar nicht 64bit lang, sondern 32 wie immer
für 64 bit brauchst du __int64
Das ist nicht richtig. Auf einem 64 Bit Rechner ist ein long in in der Regel 64 Bit lang. Das hängt ganz von der Architektur ab und ist in C/C++ nicht fest vorgegeben.
In C# beispielsweise ist long 64 Bit lang -> die dll soll auch in c# eingesetzt werden und dazu müsste man wissen, dass long in C# != long in C++ ist.
Dazu müßte man aber auch erstmal wissen, dass C# mit C++ ungefähr soviel zu tun hat wie Ostern mit Weihnachten. Beides sind Feste, aber das war's dann auch schon.

Wenn es um C# geht, bist du hier im falschen Forum - da solltest du das .NET Forum verwenden. In .NET ist es wiederum wohl definiert wie groß ein bestimmter Typ ist. Außerdem brauchst du dir über die DLLs und die Übergabe bzw. den Funktions-Aufruf eigentlich überhaupt keine Gedanken zu machen. Die Schnittstelle der DLL kann z.B. mit Lutz Roeders .NET Reflector Tool ausgelesen werden. Die DLL kann in jeder .NET Sprache verwendet werden.

Gruß
 
Hi,

Dazu müßte man aber auch erstmal wissen, dass C# mit C++ ungefähr soviel zu tun hat wie Ostern mit Weihnachten. Beides sind Feste, aber das war's dann auch schon.

Wenn es um C# geht, bist du hier im falschen Forum - da solltest du das .NET Forum verwenden. In .NET ist es wiederum wohl definiert wie groß ein bestimmter Typ ist. Außerdem brauchst du dir über die DLLs und die Übergabe bzw. den Funktions-Aufruf eigentlich überhaupt keine Gedanken zu machen. Die Schnittstelle der DLL kann z.B. mit Lutz Roeders .NET Reflector Tool ausgelesen werden. Die DLL kann in jeder .NET Sprache verwendet werden.

Ich hab mich evtl falsch ausgedrückt:

Ich möchte mein Problem mal an einem kleinen Beispiel erläutern:

Meine dll soll sowohl in c, c++ als auch in c# oder vb oder ... importiert werden können, aus diesem Grund erstelle ich die DLL auch in C++ -> native code.

Nun ist es aber schlecht, wenn ich in einer Funktion ein long als Übergabeparameter habe, weil der nutzer in c ein ganz anderes long übergibt als der nutzer in c#. Sicherlich ist es möglich dass der c# nutzer ein integer übergibt aber eine dll sollte einheitlich sein.

Ich dachte dass es evtl soetwas dll-datentypen gibt die in jeder programmiersprache vorhanden sind, hab soetwas auch schon mal irgendwo gelesen (LPSTRING oder so) ein weiteres beispiel wären auch die datentypen aus der windows registry (DWORD).

aber trotzdem vielen dank für euere antworten

lg Chriss
 
Zurück