AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Übersetzung einer Funktion von VC++7 in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzung einer Funktion von VC++7 in Delphi

Ein Thema von BAMatze · begonnen am 14. Nov 2008 · letzter Beitrag vom 19. Nov 2008
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:11
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:
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;
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.

Danke BAMatze
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:15
Weder TImage noch TPaintBox sind aus Windowssicht eine Fenster. Versuch es mal mit einer Form
Markus Kinzler
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:16
HWND ist einfach ein generisches Fensterhandle. Was Du dort genau übergeben solltest, ist allerdings recht schwer zu sagen ohne den C++ Code zu kennen.
Fridolin Walther
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:42
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:
typedef HANDLE HCAM;

USBCAMEXP is_InitCamera(HCAM* phf, HWND hWnd);
habe ebendfalls einfach erstmal stumpf versucht das 1:1 zu übersetzen und bekomme einen Fehler, wenn ich schreibe:

Delphi-Quellcode:
var HCam: handle;
    PHCam: ^HCam;

procedure is_InitCamera(phc: PHCam; hwnd: HWND); stdcall; external "uc480.dll";
Fehlermeldung ist, dass er den Variablentyp handle nicht kennt.
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:44
THandle ist der Typ in Delphi.
Fridolin Walther
  Mit Zitat antworten Zitat
Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 14. Nov 2008, 14:55
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;
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Übersetzung einer Funktion von VC++7 in Delphi

  Alt 19. Nov 2008, 10:57
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:

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;
Hoffe jemand hat einen guten Tip für mich.

Vielen Danke
BAMatze
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz