Forum: PC-Programmierung Native C DLL


von ETech (Gast)


Lesenswert?

Guten Morgen,

eine vorhanden C Applikation soll zu einer DLL umgewandelt werden, so 
dass diese in C# benutzt werden kann.
1
obUDPCOM UdpCom;
2
3
struct InitData
4
{
5
  uint32_t Address;
6
  uint16_t Port;
7
};
8
9
extern "C"
10
{
11
__declspec(dllexport) void Init(InitData_InitData)
12
{
13
int SrcPort = 1000;
14
int DstPort = 1001;
15
16
17
_obUDPCOM (&UdpCom, InitData.Address, SrcPort , DstPort );
18
}
19
20
__declspec(dllexport) void SendUdpMessage(void)
21
{
22
char Daten[100];
23
UdpCom->Send(&UdpCom, (char*)&Daten, 100);}

Die Initialisierung sowie Senden und Empfangen von UDP Nachrichten 
funktioniert in C#.
Wenn nun eine weiterer Teilnehmer über diese DLL angesteuert werden 
soll, muss eine zweite Instanz von UdpCom erzeugt werden. Wie wird sowas 
in C realisiert?

von Frank (Gast)


Lesenswert?


von ETech (Gast)


Lesenswert?

Ok mit malloc Speicher reservieren. Wie wird nun dies in meinem Fall 
realisiert? Ich habe keine Ahnung wie ich dies umsetzen könnte.

von Peter II (Gast)


Lesenswert?

ETech schrieb:
> Wenn nun eine weiterer Teilnehmer über diese DLL angesteuert werden
> soll, muss eine zweite Instanz von UdpCom erzeugt werden. Wie wird sowas
> in C realisiert?

dafür muss du das Interface umgestalten.

Du braucht z.b. folgende Funktionen:
1
UDPHandle* Init(InitData_InitData);
2
void SendUdpMessage(UDPHandle*);
3
void Close( UDPHandle* )

UDPHandle ist dann eine stuktur wo du deine internen Daten der 
Verbindung speicherst.

Aber warum nicht gleich alles in C# machen? Was soll der Mix?

von ETech (Gast)


Lesenswert?

Die Anwendung ist nunmal in C. Für C# muss man den ganzen C Code in C# 
umsetzen. Aber diesen Weg möchten wir nicht gehen.

von Peter II (Gast)


Lesenswert?

ETech schrieb:
> Die Anwendung ist nunmal in C. Für C# muss man den ganzen C Code in C#
> umsetzen. Aber diesen Weg möchten wir nicht gehen.
wenn ihr schon an so einfache Dingen scheitert. kann die Anwendung nicht 
sonderlich komplex sein. Schon das Debuggen wird mit der DLL nervig.

von ETech (Gast)


Lesenswert?

Wie könnte die UDPHandle Struktur aussehen?

von ETech (Gast)


Lesenswert?

Das Debuggen funktioniert ohne Probleme.

von ETech (Gast)


Lesenswert?

Vielen Dank für Eure Hilfe. Ein echt tolles Forum.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

ETech schrieb:
> Aber diesen Weg möchten wir nicht gehen.

"möchten" ist gut; in Deinem anderen Thread hast Du ja schon nahegelegt, 
daß können wohl eher die Ursache ist.

Aus einem funktionierenden Programm eine DLL zu basteln, die womöglich 
in mehreren Instanzen parallel genutzt werden soll, das ist nicht 
einfacher.


Fangen wir mal am anderen Ende an:

Was ist eigentlich die tatsächliche Aufgabenstellung und was macht das 
tolle schon vorhandene C-Programm denn nun genau?

Vielleicht lässt sich für das Ding ja einfach eine Alternative finden.

von Peter II (Gast)


Lesenswert?

ETech schrieb:
> Wie könnte die UDPHandle Struktur aussehen?

da kannst nur du wissen, dort müssen alle Daten rein die du für einen 
Client brauchst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.