c++ nach VB.NET Übersetzten

Für alle Themen, die nichts mit Laser zu tun haben.

Moderator: Gooseman

Antworten
Benutzeravatar
Dodo
Beiträge: 264
Registriert: So 14 Jun, 2009 10:25 pm
Do you already have Laser-Equipment?: 2x 150mw RGY Stairville
Wohnort: Berlin
Kontaktdaten:

c++ nach VB.NET Übersetzten

Beitrag von Dodo » Mi 09 Sep, 2009 2:36 pm

Moin,

also ich habe mir ein DMX Interface gebaut, dabei gab es auch ein Beispielprojekt für .NET. Jedoch greift dies nicht auf alle funktionen der Library zu und nun wollte ich mir die deklaration selber schreiben. Es gibt auch ein c++ Beispiel wo diese Deklarationen drin sind, jedoch kann ich kein c++ und weiß demnach nicht genau wie ich sie nach VB übersetzten soll. Vielleicht kennst sich hier ja jemand mit beiden Sprachen aus und kann mit ggf. bischel helfen.

C++ Code:

Code: Alles auswählen

#include <stdio.h>
#include <windows.h>

// types for library functions
typedef unsigned char TDMXArray[512];
typedef char TSERIAL[16];
typedef TSERIAL TSERIALLIST[32];
typedef void (STDCALL* THOSTDEVICECHANGEPROC) (void);

// define library functions
typedef void (STDCALL* TGetAllConnectedInterfaces) (TSERIALLIST* SerialList);
TGetAllConnectedInterfaces GetAllConnectedInterfaces;
typedef void (STDCALL* TGetAllOpenedInterfaces) (TSERIALLIST* SerialList);
TGetAllOpenedInterfaces GetAllOpenedInterfaces;
typedef DWORD (STDCALL* TSetInterfaceMode) (TSERIAL Serial, unsigned char Mode);
TSetInterfaceMode SetInterfaceMode;
typedef DWORD (STDCALL* TOpenLink) (TSERIAL Serial, TDMXArray *DMXOutArray, TDMXArray *DMXInArray);
TOpenLink OpenLink;
typedef DWORD (STDCALL* TCloseLink) (TSERIAL Serial);
TCloseLink CloseLink;
typedef DWORD (STDCALL* TCloseAllLinks) (void);
TCloseAllLinks CloseAllLinks;
typedef DWORD (STDCALL* TRegisterInterfaceChangeNotification) (THOSTDEVICECHANGEPROC Proc);
TRegisterInterfaceChangeNotification RegisterInterfaceChangeNotification;
typedef DWORD (STDCALL* TUnregisterInterfaceChangeNotification) (void);
TUnregisterInterfaceChangeNotification UnregisterInterfaceChangeNotification;
typedef DWORD (STDCALL* TRegisterInputChangeNotification) (THOSTDEVICECHANGEPROC Proc);
TRegisterInputChangeNotification RegisterInputChangeNotification;
typedef DWORD (STDCALL* TUnregisterInputChangeNotification) (void);
TUnregisterInputChangeNotification UnregisterInputChangeNotification;

void InterfaceChange(void) {
  printf("Interface configuration has changed\n");
}

void InputChange(void) {
  printf("Input has changed\n");
}

int main(int argc, char *argv[])
{

  HINSTANCE dll_handle = LoadLibrary("usbdmx.dll");

  // Get library function addresses
  GetAllConnectedInterfaces = (TGetAllConnectedInterfaces)GetProcAddress(dll_handle, "GetAllConnectedInterfaces");
  GetAllOpenedInterfaces = (TGetAllOpenedInterfaces)GetProcAddress(dll_handle, "GetAllOpenedInterfaces");
  SetInterfaceMode = (TSetInterfaceMode)GetProcAddress(dll_handle, "SetInterfaceMode");
  OpenLink = (TOpenLink)GetProcAddress(dll_handle, "OpenLink");
  CloseLink = (TCloseLink)GetProcAddress(dll_handle, "CloseLink");
  CloseAllLinks = (TCloseAllLinks)GetProcAddress(dll_handle, "CloseAllLinks");
  RegisterInterfaceChangeNotification = (TRegisterInterfaceChangeNotification)GetProcAddress(dll_handle, "RegisterInterfaceChangeNotification");
  UnregisterInterfaceChangeNotification = (TUnregisterInterfaceChangeNotification)GetProcAddress(dll_handle, "UnregisterInterfaceChangeNotification");
  RegisterInputChangeNotification = (TRegisterInputChangeNotification)GetProcAddress(dll_handle, "RegisterInputChangeNotification");
  UnregisterInputChangeNotification = (TUnregisterInputChangeNotification)GetProcAddress(dll_handle, "UnregisterInputChangeNotification");

  // "InterfaceList" is filled by "GetAllConnectedInterfaces" or "GetAllOpenedInterfaces"
  // It contains the serials of up to 32 connected interfaces. A serial (16 characters) is
  // an array of char with a fixed length of 16, it is not a null terminated string (there is no null-termination)
  TSERIALLIST InterfaceList;

  // "DMX_Out" "DMX_In" are the DMX data buffers
  TDMXArray DMX_Out, DMX_In;

  // You can (optional) register a parameterless function which will be called when an interface is connected/disconnected
  RegisterInterfaceChangeNotification(&InterfaceChange);

  // You can (optional) register a parameterless function which will be called if at least one interface is configurated in input mode and some input channels have changed
  RegisterInputChangeNotification(&InputChange);

  // Here you get the list of all connected interfaces. If the value (serial) of "0000000000000000" occurs in the list then there are no more interfaces connected
  GetAllConnectedInterfaces(&InterfaceList);

  // With this function you open a link to the specified interface. Also you have to turn over the pointer to your DMX buffers.
  // The first pointer points to the DMX out buffer (PC -> Interface), the second to the DMX in buffer (Interface -> PC)
  // If you don't use either DMX output or DMX input you can set the corresponding pointer to zero.
  // (In this example simply the first interface of the list returned from "GetAllConnectedInterfaces" is opened without testing if there is connected any interface to the PC)
  OpenLink(InterfaceList[0], &DMX_Out, &DMX_In);

  // If you would call "GetAllOpenedInterfaces" here you'd get a list that contains only one valid serial: InterfaceList[0]

  // Now you can set the mode of the specified interface (a link must be opened).
  // The following modes are allowed:
  // 0: Do nothing - Standby
  // 1: DMX In -> DMX Out
  // 2: PC Out -> DMX Out
  // 3: DMX In + PC Out -> DMX Out
  // 4: DMX In -> PC In
  // 5: DMX In -> DMX Out & DMX In -> PC In
  // 6: PC Out -> DMX Out & DMX In -> PC In
  // 7: DMX In + PC Out -> DMX Out & DMX In -> PC In
  // If you want simply write to the DMX output use mode 2, if you want also read the DMX input use mode 6
  SetInterfaceMode(InterfaceList[0], 6);

  // Your main programm loop
  while (getc(stdin) != 'e') {

    // Now you can write to your DMX out buffer. The dll detects any change and the new values are transmitted to the interface
    DMX_Out[0] = 1;
    DMX_Out[1] = 2;
    DMX_Out[2] = 3;
    DMX_Out[3] = 4;
    //... and so on ...

    // Or you can read from the DMX input. If you have registered a function with "RegisterInputChangeNotification" it will be called everytime a channel changes it's value.
    // Every time the function is called up to 32 channels may have changed their value. Please hold the registered function as short as possible (< 1ms execution time)
    unsigned char tmp;
    tmp = DMX_In[0];
    tmp = DMX_In[1];
    tmp = DMX_In[2];
    tmp = DMX_In[3];
    //... and so on ...

    Sleep(10);
  }

  // At the end of the programm you should clean up a little
  CloseLink(InterfaceList[0]);
  UnregisterInputChangeNotification;
  UnregisterInterfaceChangeNotification;

  FreeLibrary(dll_handle);
  return 0;
}
und hier ist noch eine Funktionsdokumentation der DLL:

Code: Alles auswählen

usbdmx.dll - Schnittstelle:
-----------
Funktionen:
-----------

GetAllConnectedInterfaces: TSERIALLIST;
GetAllOpenedInterfaces: TSERIALLIST;
SetInterfaceMode(Serial: TSERIAL; Mode: byte): DWORD;
OpenLink(Serial: TSERIAL; DMXOutArray: PDMXArray; DMXInArray: PDMXArray): DWORD;
CloseLink(Serial: TSERIAL): DWORD;
CloseAllLinks: DWORD;
RegisterInterfaceChangeNotification(Proc: THOSTDEVICECHANGEPROC): DWORD;
UnregisterInterfaceChangeNotification: DWORD;
RegisterInputChangeNotification(Proc: THOSTINPUTCHANGEPROC): DWORD;
UnregisterInputChangeNotification: DWORD;
GetDeviceVersion(Serial: TSERIAL): DWORD;
SetInterfaceAdvTxConfig(Serial: TSERIAL; Control: Byte; Breaktime: word; Marktime: word; Interbytetime: word; Interframetime: word; Channelcount: word; Startbyte: byte): DWORD; stdcall; // >= v1.1
StoreInterfaceAdvTxConfig(Serial: TSERIAL): DWORD; stdcall; // >= v1.1
RegisterInputChangeBlockNotification(Proc: THOSTINPUTCHANGEPROCBLOCK): DWORD; // >= v1.1
UnregisterInputChangeBlockNotification: DWORD; // >= v1.1


-------------------------------------
Object-Pascal Deklarationsvorschläge:
-------------------------------------

function GetAllConnectedInterfaces: TSERIALLIST; stdcall external 'usbdmx.dll';
function GetAllOpenedInterfaces: TSERIALLIST; stdcall external 'usbdmx.dll';
function SetInterfaceMode(Serial: TSERIAL; Mode: byte): DWORD; stdcall external 'usbdmx.dll';
function OpenLink(Serial: TSERIAL; DMXOutArray: PDMXArray; DMXInArray: PDMXArray): DWORD; stdcall external 'usbdmx.dll';
function CloseLink(Serial: TSERIAL): DWORD; stdcall external 'usbdmx.dll';
function CloseAllLinks: DWORD; stdcall external 'usbdmx.dll';
function RegisterInterfaceChangeNotification(Proc: THOSTDEVICECHANGEPROC): DWORD; stdcall external 'usbdmx.dll';
function UnregisterInterfaceChangeNotification: DWORD; stdcall external 'usbdmx.dll';
function RegisterInputChangeNotification(Proc: THOSTDEVICECHANGEPROC): DWORD; stdcall external 'usbdmx.dll';
function UnregisterInputChangeNotification: DWORD; stdcall external 'usbdmx.dll';
function GetDeviceVersion(Serial: TSERIAL): DWORD; stdcall external 'usbdmx.dll';
function SetInterfaceAdvTxConfig(Serial: TSERIAL; Control: Byte; Breaktime: word; Marktime: word; Interbytetime: word; Interframetime: word; Channelcount: word; Startbyte: byte): DWORD; stdcall; stdcall external 'usbdmx.dll';
function StoreInterfaceAdvTxConfig(Serial: TSERIAL): DWORD; stdcall; stdcall external 'usbdmx.dll';
function RegisterInputChangeBlockNotification(Proc: THOSTINPUTCHANGEPROCBLOCK): DWORD; stdcall external 'usbdmx.dll';
function UnregisterInputChangeBlockNotification: DWORD; stdcall external 'usbdmx.dll';


------
Werte:
------
Mode: 0 - Standby; 1 - DMX In -> DMX Out; 2 - PC Out -> DMX Out; 3 - DMX In + PC Out -> DMX Out; 4 - DMX In -> PC In; 5 - DMX In -> DMX Out & DMX In -> PC In; 6 - PC Out -> DMX Out & DMX In -> PC In; 7 - DMX In + PC Out -> DMX Out & DMX In -> PC In;
Version: 0x0100 = v1.00, 0x0110 = v1.10 usw.
ConfigControl: Bit 0: Enable Interbytedelay, Bit 1: Enable Interframedelay, Default = 0
Breaktime: Zeit des Resetpulses, 5,333us Schrittweite, Default = 17
Marktime: Zeit zwischen Resetpuls und Startbyte, 0.666us Schrittweite, Default = 13
Interbytetime: Zeit zwischen zwei Datenbytes (8N2), 0.666us Schrittweite, Default = 0
Interframetime: Zeit zwischen dem letzten Datenbyte und dem Resetpuls, 21,333us Schrittweite, Default = 0
Channelcount: Default = 512
Startbyte: Default = 0


------------------------------
Object-Pascal Typenvorschläge:
------------------------------

PDMXArray = ^TDMXArray;
TDMXArray = array[0..511] of byte;
TSERIAL = array[0..15] of Char;
TSERIALLIST = array[0..31] of TSERIAL;
THOSTDEVICECHANGEPROC = procedure; stdcall;
THOSTINPUTCHANGEPROC = procedure; stdcall;
THOSTINPUTCHANGEPROCBLOCK = procedure(blocknumber: byte); stdcall; // >= v1.1


------------------------
Hilfsroutinenvorschläge:
------------------------

function SerialToSerialstring(Serial: TSERIAL): string;
var i: byte;
begin
Result := '';
for i := 0 to 15 do Result := Result + Serial[i];
end;

function SerialstringToSerial(Serialstr: string): TSERIAL;
var i: byte;
    len: byte;
begin
len := length(Serialstr);
if len > 16 then len := 16;
for i := 0 to 15 do Result[i] := '0';
for i := 1 to len do Result[i + 15 - len] := Serialstr[i];
end;
Würde mich wirklich über hilfe freuen!
Das Projekt könnt ihr hier einsehen http://www.digital-enlightenment.de/usbdmx.htm

MfG Dodo

Code: Alles auswählen

RegEx ist wie Quantenphysik - Niemand versteht es zu 100%, aber alle wissen dass es irgendwie funktioniert!

Benutzeravatar
Dr.Ulli
Beiträge: 2383
Registriert: Do 08 Feb, 2007 8:02 am
Do you already have Laser-Equipment?: jede Menge von 1mW bis 5,5W
Wohnort: linker Niederrhein (Geldern)

Re: c++ nach VB.NET Übersetzten

Beitrag von Dr.Ulli » Mi 09 Sep, 2009 7:23 pm

Das nutzt nicht viel...
Ich bin zwar kein ausgesprochener Experte für C++, aber kann da mittlerweile ganz gut mit umgehen: Der C++ Code enthält nur Definitionen (typedef) und Aufrufe von Funktionen aus windows.cpp - das muss ja wohl mit übersetzt werden.(siehe #include windows.h)...
Wenn du das Visual-Studio hast, - da gibt es eine Möglichkeit zwischen den verschiedenen Sprachen (c++, VB, C#, usw...) zu konvertieren, allerdings oft mit mässigem Erfolg.... :freak:
Alt ist man, wenn man mehr an die Vergangenheit als an die Zukunft denkt.

lucas
Beiträge: 552
Registriert: Sa 24 Nov, 2007 12:58 am
Do you already have Laser-Equipment?: bla

Re: c++ nach VB.NET Übersetzten

Beitrag von lucas » Mi 09 Sep, 2009 8:20 pm

Dr Ulli du hast wohl übersehen dass er eine DLL ansprechen will.

Also reicht es diese .h Datei umzubauen.

Benutzeravatar
Dr.Ulli
Beiträge: 2383
Registriert: Do 08 Feb, 2007 8:02 am
Do you already have Laser-Equipment?: jede Menge von 1mW bis 5,5W
Wohnort: linker Niederrhein (Geldern)

Re: c++ nach VB.NET Übersetzten

Beitrag von Dr.Ulli » Mi 09 Sep, 2009 8:36 pm

Nun...
Bei C++ hat man immer eine Header-Datei (*.h) mit allen Definitionen und eine *.cpp - Datei (so wie die oben) mit den Ereignisabläufen...

Also müssen die Dateien windows.h, windows.cpp sowie stdio.h und stdio.cpp mit übersetzt werden...sowie die Ressourcen (z.B. ein Dialog), die von diesen Dateien angesprochen werden....oder? (....und natürlich auch die Header-Datei zu den Abläufen der *.cpp Datei da oben....- wenn das nicht gerade windows.cpp ist).

Wie gesagt - ich bin kein Experte - nur fortgeschrittener Laie. :wink:
Alt ist man, wenn man mehr an die Vergangenheit als an die Zukunft denkt.

Benutzeravatar
Dodo
Beiträge: 264
Registriert: So 14 Jun, 2009 10:25 pm
Do you already have Laser-Equipment?: 2x 150mw RGY Stairville
Wohnort: Berlin
Kontaktdaten:

Re: c++ nach VB.NET Übersetzten

Beitrag von Dodo » Mi 09 Sep, 2009 8:37 pm

Richtig, es geht nur um diese Definitionen, also das einbinden der Funktionen der Library.

Sowas wie

Code: Alles auswählen

Declare Function GetAllInterfaces Lib "usbdmx.dll" (ByRef irgendwas As irgendwas)
nur leider komme ich damit nicht weiter!

Code: Alles auswählen

RegEx ist wie Quantenphysik - Niemand versteht es zu 100%, aber alle wissen dass es irgendwie funktioniert!

Benutzeravatar
thomasf
Beiträge: 1261
Registriert: So 06 Okt, 2002 12:00 pm
Do you already have Laser-Equipment?: YES
Wohnort: Berlin
Kontaktdaten:

Re: c++ nach VB.NET Übersetzten

Beitrag von thomasf » Mi 09 Sep, 2009 10:18 pm

Hi,

da mußt du mal suchen wie man in .net eine dll einbindet. wie du die funktionen definierst steh ja alles in der dll beschreibung.

andererseits finde ich so hardwaremäßige geschichten mit einer sprache wie .net oder java zu erstellen ehr schlecht als recht.

mfg
thomas

Benutzeravatar
Dodo
Beiträge: 264
Registriert: So 14 Jun, 2009 10:25 pm
Do you already have Laser-Equipment?: 2x 150mw RGY Stairville
Wohnort: Berlin
Kontaktdaten:

Re: c++ nach VB.NET Übersetzten

Beitrag von Dodo » Do 10 Sep, 2009 7:30 am

Nunja wie man DLLs einbindet weiß ich. Zumindest COM DLLs kann man ja einfach über Verweise einbinden. Diese DLL geht aber nicht, habe schon etliche wege versucht und das Einbinden funktioniert auch, zumindest halbwegs, ich habe zum Teil nur probleme mit dem Parametern.

Wie Definiere ich z.B. TSERIALLIST?

Also TSERIALLIST ist ja ein Array vom Typ TSERIAL und TSERIAL ist ein Array vom Typ Char.
In VB etwa so

Code: Alles auswählen

Private TSERIAL(15) As Char
Private TSERIALLIST(31) As TSERIAL ' <<< dies geht schonmal nicht weil ich keine Variable als Typ zuordnen kann

Private Declare Sub GetAllConnectedInterfaces Lib "usbdmx.dll" (ByRef Seriallist As TSERIALLIST)
Nur leider funktioniert das nicht so wie ich mir das vorstelle!

Wie soll ich denn sonst die Hardware ansprechen? Ich meine .NET, C++, Java sind ja auch nur alles Sprachen und ich habe mich halt in VB eingearbeitet, somit komme ich damit am besten klar, nur habe eben probleme mit dem einbinden der DLL.

Nunja ich habe zwar mal den Ersteller der Hardware und DLL angeschrieben, ob er mir da helfen kann, aber dachte ich hole mir an mehreren Stellen mal inspirationen, hätte ja sein können das jemand eine Idee hierzu hat.

Code: Alles auswählen

RegEx ist wie Quantenphysik - Niemand versteht es zu 100%, aber alle wissen dass es irgendwie funktioniert!

Benutzeravatar
fst-laser
Beiträge: 764
Registriert: Sa 02 Jun, 2001 12:00 pm
Wohnort: Gersthofen bei Augsburg

Re: c++ nach VB.NET Übersetzten

Beitrag von fst-laser » Do 10 Sep, 2009 7:31 am

Die windows.h usw. wird benötigt, damit man auch mit C-- Fenster, Buttons usw. anzeigen und die tolle Windows-Nachrichtenschleife bearbeiten kann.

VB (darum ja Visual!) bringt sowas schon ab Werk mit. :)

DLL -> VB.net
http://www.tutorials.de/forum/net-archi ... inden.html

Gruß Flo
F S T Discohits, Laserrausch -
Laser Abheben in die Welt der Strahlen!

Suche einen Laser Physics - Reliant300WC Weißlichtlaser...

Benutzeravatar
Dr.Ulli
Beiträge: 2383
Registriert: Do 08 Feb, 2007 8:02 am
Do you already have Laser-Equipment?: jede Menge von 1mW bis 5,5W
Wohnort: linker Niederrhein (Geldern)

Re: c++ nach VB.NET Übersetzten

Beitrag von Dr.Ulli » Do 10 Sep, 2009 9:03 am

fst-laser hat geschrieben:C--
Jepp - das passt besser! :lol: :lol: :lol:

C++ bedeutet ja eigentlich auch nur aufgebohrtes ("inkrementiertes":- n++ bedeutet ja n+1) C ...und das war der Legende nach ja nur ein Aprilscherz...aber die aufkommenden Informatiker (früher hatten ja wir Physiker die "Rechnergewalt") haben sich wohl da draufgestürzt, wie die Fliegen auf die "Sch...".

Ich selbst programiere auch schon seit guten 30 Jahren in Basic (Commodore-B, Turbo-B, VB, VBA, Bascom)...und habe damit bisher alles umgesetzt bekommen, was ich wollte...hab aber auch Pascal, Fortran (noch mit Lochkarten), Cobol, ein wenig Assembler kennengelernt - aber in der Firma muss ich mich (leider) mit C++ auseinandersetzen...jeden "Sch..." muss man definieren und für alles braucht man zusätzliche "CodeSchnipsel" - z.B. um mit Farben in Listen und anderen Steuerelementen arbeiten zu können - das geht in VB oder C# alles vieeeeeeeeeel intuitiver....

Grüße und @Dodo: Viel Erfolg beim konvertieren!
Alt ist man, wenn man mehr an die Vergangenheit als an die Zukunft denkt.

Benutzeravatar
Dodo
Beiträge: 264
Registriert: So 14 Jun, 2009 10:25 pm
Do you already have Laser-Equipment?: 2x 150mw RGY Stairville
Wohnort: Berlin
Kontaktdaten:

Re: c++ nach VB.NET Übersetzten

Beitrag von Dodo » Do 10 Sep, 2009 9:23 am

Naja, ich habe mir eben mal Dev-C++ installiert und den c++ Beispiel Code getestet, er funktioniert einwandfrei.
Nun installiere ich mir gerade Visual Studio ++ womit man ja auch c++ machen kann, und ich hoffe damit ein DLL Wrapper erstellen zu können, den ich dann direkt in VB.NET nutzen kann.

Weil das Einbinden will einfach nicht funktionieren, da kommen ständig merkwürdie Fehlermeldungen und ich dachte mir halt mit einem Wrapper parse ich in c++ die Rückgaben und gebe sie dann VB Konform weiter. Mal schauen ob ich es hinbekomme!

Code: Alles auswählen

RegEx ist wie Quantenphysik - Niemand versteht es zu 100%, aber alle wissen dass es irgendwie funktioniert!

Benutzeravatar
fst-laser
Beiträge: 764
Registriert: Sa 02 Jun, 2001 12:00 pm
Wohnort: Gersthofen bei Augsburg

Re: c++ nach VB.NET Übersetzten

Beitrag von fst-laser » Do 10 Sep, 2009 9:29 pm

@Dr. Ulli:
Wem sagst du das. Ich darf in der Arbeit sicherheitsgerichteten Code in C++ für zwei Prozessoren mit zwei unterscheidlichen (diversitären) Compilern (GNU und DIAB) schreiben. Das ganze für VxWorks mit der WindRiver-WorkBench. Die ist in Java geschrieben und macht im nu aus dem Core2Duo einen gefülten 80186er. :x

Wundert mich nicht, das der Mars-Roboter Sojourner (mit VxWorks) nicht auf Anhieb funktioniert hat... :mrgreen:

Jaja die Informatiker, sind ne ganz besondere Gruppe.

Gruß
Flo (der als Elektrotechniker nur Programmiersklave ist)
F S T Discohits, Laserrausch -
Laser Abheben in die Welt der Strahlen!

Suche einen Laser Physics - Reliant300WC Weißlichtlaser...

john
Beiträge: 1823
Registriert: Mi 13 Jun, 2001 12:00 pm
Wohnort: Berlin

Re: c++ nach VB.NET Übersetzten

Beitrag von john » Fr 11 Sep, 2009 6:24 pm

Anbieterkennzeichnung - http://www.cyberstoff.de/Impressum

Benutzeravatar
Dr.Ulli
Beiträge: 2383
Registriert: Do 08 Feb, 2007 8:02 am
Do you already have Laser-Equipment?: jede Menge von 1mW bis 5,5W
Wohnort: linker Niederrhein (Geldern)

Re: c++ nach VB.NET Übersetzten

Beitrag von Dr.Ulli » Fr 11 Sep, 2009 8:07 pm

@John: DANKE! :D Spitzen Link :!: ...man muss sich nur die Mühe machen, gezielt zu suchen (und das auch zu können!) :mrgreen:
Alt ist man, wenn man mehr an die Vergangenheit als an die Zukunft denkt.

Antworten

Zurück zu „Off-Topic“

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 2 Gäste