![]() |
Übersetzung einer Funktion von VC++7 in Delphi
Hallo an alle,
hab mal wieder ein Problem. Ich muss eine Kamerabild in meinem Programm darstellen. Ich hab die DLL aber keine Beschreibung dazu. Was mir mit der Kamera geliefert wurde, sind Beispielprogramme in C++, welche ich nur teilweise lesen kann. Das größte Problem besteht aber darin, wie ich die Variablen konvertieren muss, um die Funktion für Delphi verständlich zu machen. Hier die Funktion an welcher ich gerade arbeite:
Delphi-Quellcode:
Dies ist die Verbindungsfunktion für die Kamera. Meine Frage nun ist, kann ich für das HWND welches ich der Funktion übergebe einfach eine TPaintBox oder TImage übergeben oder welche Komponente würde sich eventuell besser eignen für eine ordentliche Darstellung. Ich weiß einige denken vieleicht, das Problem ist trivial, da ich es zum ersten Mal mache und auch kein entsprechendes Thema hier gefunden hab, stelle ich die Frage einfach mal und hoffe jemand kann mir helfen.
int Cuc480::InitCamera (int nId, HWND hwnd)
{ int nRet = IS_CANT_OPEN_DEVICE; HCAM hu = (HCAM) nId; if((m_hu == NULL) && IsLoaded()) { nRet = is_InitCamera (&hu, hwnd); if (nRet == IS_SUCCESS) { m_hu = hu; m_hwnd = hwnd; // Disable Autoexit is_EnableAutoExit( m_hu, IS_DISABLE_AUTO_EXIT ); } } return nRet; Danke BAMatze |
Re: Übersetzung einer Funktion von VC++7 in Delphi
Weder TImage noch TPaintBox sind aus Windowssicht eine Fenster. Versuch es mal mit einer Form
|
Re: Übersetzung einer Funktion von VC++7 in Delphi
HWND ist einfach ein generisches Fensterhandle. Was Du dort genau übergeben solltest, ist allerdings recht schwer zu sagen ohne den C++ Code zu kennen.
|
Re: Übersetzung einer Funktion von VC++7 in Delphi
Also hab nochmal genau geschaut, anscheinend hab ich die falsche Funktion gewählt. Hier die eigentlich, welche auch in der DLL gefunden wird:
Delphi-Quellcode:
habe ebendfalls einfach erstmal stumpf versucht das 1:1 zu übersetzen und bekomme einen Fehler, wenn ich schreibe:
typedef HANDLE HCAM;
USBCAMEXP is_InitCamera(HCAM* phf, HWND hWnd);
Delphi-Quellcode:
Fehlermeldung ist, dass er den Variablentyp handle nicht kennt.
var HCam: handle;
PHCam: ^HCam; procedure is_InitCamera(phc: PHCam; hwnd: HWND); stdcall; external "uc480.dll"; |
Re: Übersetzung einer Funktion von VC++7 in Delphi
THandle ist der Typ in Delphi.
|
Re: Übersetzung einer Funktion von VC++7 in Delphi
Ohne Blick auf die DLL ist das natürlich schwer zu beantworten.
(jemand hat bei einem Linux-Projekt is_InitCamera als cdecl deklariert) Bei HCAM wird es wahrscheinlich darauf hinauslaufen:
Delphi-Quellcode:
type
HCAM = type THandle; |
Re: Übersetzung einer Funktion von VC++7 in Delphi
Hallo an alle nochmal,
Viele der Probleme die ich hier mit diesen C++ Funktionen hatte, konnte ich selbständig mit euren Komentaren schon Lösen. Jetzt kommt aber irgendwie eins, an dem ich mir schon seit einigen Stunden die Zähne ausbeiße. Ich muss das KameraBild das durch die DLL-Funktionen erzeugt wird auf meiner Form irgendwie ausgeben. Dies muss über ein Handle geschehen!!! Mein Problem jetzt ist, ich hab immer das Form1.Handle verwendet, allerdings wurde bisher noch nie etwas dort angezeigt, obwohl ich mit der GetError-Funktion der DLL alle Befehle geprüft hab und auch alle korregt ausgeführt wurden. Jetzt meine Frage, habe ich ein falsches Handle benutzt oder muss ich irgendeine Komponente verwenden? in einem Beispielprogramm in C# wird eine Paintbox benutzt. Die PaintBox in Delphi hat aber leider kein Handle oder ich habe sie nicht gefunden. Hier auch noch ein kurzer Ausschnitt meines Codes, damit ihr nachvollziehen könnt, was ich meine:
Delphi-Quellcode:
Hoffe jemand hat einen guten Tip für mich.procedure TForm1.FormCreate(Sender: TObject); var iIndex: integer; begin iss_InitCamera(HHCAM,Form1.Handle); // Komunikation zwischen Kamera und Programm wird hergestellt // Speicherplätze für die Bilder bereitstellen und in eine Sequenz einordnen for iIndex := 0 to Bildzahl do begin iss_AllocImageMem(HHCAM, 640, 480, 32, Speicher[iIndex].sSpeicherAdresse, Speicher[iIndex].iSpeicherAdresse); Speicher[iIndex].iSpeicherNummer := iIndex; iss_AddtoSequence(HHCAM, Speicher[iIndex].sSpeicherAdresse, Speicher[iIndex].iSpeicherAdresse); end; // 1Speicherplatz aktivieren und die Bildgröße sowie Position in dem Fenster/ Handle setzen iss_SetImageMem(HHCAM, Speicher[0].sSpeicherAdresse, Speicher[0].iSpeicherAdresse); iss_SetImageSize(HHCAM, 640, 480); iss_SetImagePos(HHCAM, 20,20); // Farbmodus wählen und eine Bestimmte Nachricht des Objektes/ Handle ausschalten (wird so auch in dem Beispiel gemacht) iss_SetColorMode(HHCAM, 0); iss_EnableMessage(HHCAM, 0, Form1.Handle); // Bild erzeugen und Liveansicht starten (hab einfach alles angemacht, was die DLL zur Verfügung stellt und gehofft, // dadurch einen AH-Effekt zu bekommen) leider bleibt die Form grau iss_FreezeVideo(HHCAM,20); iss_CaptureVideo(HHCAM,20); end; Vielen Danke BAMatze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz