Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi C++ my Delphi benutzen (https://www.delphipraxis.net/119075-c-my-delphi-benutzen.html)

sk.Silvia 20. Aug 2008 17:32


C++ my Delphi benutzen
 
hallo, ich ahbe ein C++ kode in einer cpp detei, wie kann ich es in delphi nutzen? kann man eine dll erstellen, und dann die c++ procedur aufzurufen? oder wass kann man tuhn?

dass kode is relativ hard nach delphi umzuschreiben, obwohl es nicht lang ist

Assertor 20. Aug 2008 17:36

Re: C++ my Delphi benutzen
 
Hi sk.Silvia,

Zitat:

Zitat von sk.Silvia
hallo, ich ahbe ein C++ kode in einer cpp detei, wie kann ich es in delphi nutzen? kann man eine dll erstellen, und dann die c++ procedur aufzurufen? oder wass kann man tuhn?

Ich kann Dir als Tipp nur den Link zu Rudy's Delphi Corner geben:

Using C++ objects in Delphi
bzw.
Using C object files in Delphi

Gruß Assertor

Carlo91 20. Aug 2008 18:02

Re: C++ my Delphi benutzen
 
Hi,
wenn der Code nicht lang ist kann ihn vielleicht ich oder ein anderer User nach Delphi übersetzen. Du kannst ihn ja mal hier Posten oder Hochladen.

MfG Carlo

sk.Silvia 20. Aug 2008 18:29

Re: C++ my Delphi benutzen
 
Delphi-Quellcode:
void ResetAdapter(char * AdapterName) {
  struct _GUID guid = {0xBA126AD1,0x2166,0x11D1,0};
  memcpy(guid.Data4, "\xB1\xD0\x00\x80\x5F\xC1\x27\x0E", 8);
  unsigned short * buf = new unsigned short[strlen(AdapterName)+1];
 
  void (__stdcall *NcFreeNetConProperties) (NETCON_PROPERTIES *);
  HMODULE NetShell_Dll = LoadLibrary("Netshell.dll");
  if (!NetShell_Dll) {
    printf("Couldn't load Netshell.dll\n");
    return;
    }
  NcFreeNetConProperties = (void (__stdcall *)(struct tagNETCON_PROPERTIES *))GetProcAddress(NetShell_Dll, "NcFreeNetconProperties");
  if (!NcFreeNetConProperties) {
    printf("Couldn't load required DLL function\n");
    return;
    }

  for (unsigned int i = 0; i <= strlen(AdapterName); i++) {
    buf[i] = AdapterName[i];
    }
  CoInitialize(0);
    INetConnectionManager * pNCM = NULL;  
    HRESULT hr = ::CoCreateInstance(guid,
                                     NULL,
                                     CLSCTX_ALL,
                                     __uuidof(INetConnectionManager),
                                     (void**)&pNCM);
    if (!pNCM)
        printf("Failed to instantiate required object\n");
    else {
        IEnumNetConnection * pENC;
        pNCM->EnumConnections(NCME_DEFAULT, &pENC);
        if (!pENC) {
          printf("Could not enumerate Network Connections\n");
          }
        else {
          INetConnection * pNC;
          ULONG fetched;
          NETCON_PROPERTIES * pNCP;
          do {
            pENC->Next(1, &pNC, &fetched);
            if (fetched && pNC) {
              pNC->GetProperties(&pNCP);
              if (pNCP) {
                if (wcscmp(pNCP->pszwName, buf) == 0) {
                  pNC->Disconnect();
                  pNC->Connect();
                  }
                NcFreeNetConProperties(pNCP);
                }
              }
            } while (fetched);
            pENC->Release();
          }
        pNCM->Release();
    }

    FreeLibrary(NetShell_Dll);
    CoUninitialize ();
  }

grenzgaenger 23. Aug 2008 11:50

Re: C++ my Delphi benutzen
 
wenn du die C++ routine compilieren kannst, in ein .OBJ kannst du das .OBJ via {$link xyz.obj} einfach in dein programm einlinken. da müsstest dann nur noch die deklaration der funktion in pascal schreiben... :-)

vielleicht wär das ein weg...

<HTH> GG

sk.Silvia 23. Aug 2008 13:30

Re: C++ my Delphi benutzen
 
und die funkcion werde ich wie rufen?

wenn si in C++
void ResetAdapter(char * AdapterName)
rufe ich sie dann

ResetAdapter(AdapterName : array of char) ?

grenzgaenger 23. Aug 2008 13:41

Re: C++ my Delphi benutzen
 
ja, so in etwa ...

deklarieren
Delphi-Quellcode:
procedure ResetAdapter(const AdapterName: PChar); external; cdecl;
und dann so aufrufen:
Delphi-Quellcode:
ResetAdapter(aAdapterName);
die details der deklaration hängen aber von den compileroptionen des C/C++ compilers ab... kannst normal einstellen... :-)

<HTH> GG

sk.Silvia 24. Aug 2008 10:20

Re: C++ my Delphi benutzen
 
dass is toll, kann ich noch ein request haben?

kann es jemand fur mich in *.obj kompilieren, den ich habe Borland C++ nicht :(

Klaus01 24. Aug 2008 12:24

Re: C++ my Delphi benutzen
 
Hallo,

wenn sich hier keiner findet, es gibt auch kostenlose C++ Compiler.
gcc, MinGW oder auch mit GUI.

Grüße
Klaus

grenzgaenger 24. Aug 2008 21:31

Re: C++ my Delphi benutzen
 
Zitat:

Zitat von Klaus01
Hallo,

wenn sich hier keiner findet, es gibt auch kostenlose C++ Compiler.
gcc, MinGW oder auch mit GUI.

Grüße
Klaus

ganz so einfach ist es leider nicht. das .OBJ format ist zwar von INTEL standardisiert, aber leider gibt es viele C dialekte, z.b. den von M$. man kann aus den schnippsel zwar nicht sehr viel erkennen, jedoch scheint es, als ob es von einem M$ C/C++ compiler stammt.

d.h. die ganzen header dürften mit einem anderen compiler selbst geschrieben werden müssen, wenn die sourcen nicht vorhanden sind.

denke, es wär beinahe besser den code gleich von der kristallkugel direkt in delphi zu implementieren, anstatt zuerst noch nach C


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf