AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) C# Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

Ein Thema von MarioR · begonnen am 3. Apr 2012 · letzter Beitrag vom 16. Apr 2012
Antwort Antwort
MarioR

Registriert seit: 11. Nov 2005
5 Beiträge
 
Delphi 6 Enterprise
 
#1

Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 3. Apr 2012, 11:21
Hallo,
ich nutze eine Delphi-Win32-Dll in C# (.Net 4.0 VS2010).
Alle Funktionen arbeiten einwandfrei, bis auf die, welche eine Delphi-Boolean als
Rückgabewert haben. Diese schmeißen eine "AccessViolationException".

hier etwas Code:

Delphi function-Typedef:
DbOpen = function: Boolean; stdcall;
C# function Typedef:
Code:
[return: MarshalAs(UnmanagedType.Bool)]
protected delegate Boolean TMatriKSDbOpen();
protected TMatriKSDbOpen matriKSDbOpen;
C#-Seite Delphi-Dll dynamisch laden
Code:
...LoadLibraryEx...
        public Delegate CreateDynamicDllDelphi(string functionName, Type delegateType)
        {
            IntPtr funcAddr = GetProcAddress(dllHandle, functionName);
            if (funcAddr == IntPtr.Zero)
                throw new EntryPointNotFoundException("Function: " + functionName);
            return Marshal.GetDelegateForFunctionPointer(funcAddr, delegateType);
        }
matriKSDbOpen = (TMatriKSDbOpen)CreateDynamicDllDelphi("DbOpen", typeof(TMatriKSDbOpen));
Benutzen der C#-Seite:
Code:
bool openOk = matriKSDbOpen(); // throw AccessViolationException
ebenfals habe ich getestet:
[return: MarshalAs(UnmanagedType.I1)]

... und nun bin ich mit meinem Latein am ende
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
35.949 Beiträge
 
Delphi XE6 Professional
 
#2

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 3. Apr 2012, 11:28
Nimm mal einen COM-Boolean (WordBool oder LongBool)
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.974 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 3. Apr 2012, 11:58
In C sind die Boolean meist 32/64 Bit (Registerbreite), während der Delphi-Boolean nur 8 Bit (1 byte) ist.

Aber das sollte beim Result nicht in einer Exception enden.
Höchstens in false-positives, wo das False dann fälschlicher Weise als true erkannt wird, da die zusätzlichen Bytes nicht unbedingt 0 sein müssen,
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
MarioR

Registriert seit: 11. Nov 2005
5 Beiträge
 
Delphi 6 Enterprise
 
#4

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 4. Apr 2012, 09:28
Hallo,

wir (unser Delphi-Progger und ich) haben jetzt alles Mögliche probiert.
Diese besch... AccessViolationException bleibt, .

Lange Rede... das Boolean wird durch String (PChar '0' or '1') ersetzt,
das geht wenigstens.

Delphi Funktion-TypeDef
DbHelp = function: PChar; stdcall;

C# Function-TypeDef
Code:
[return: MarshalAs(UnmanagedType.AnsiBStr)]
protected delegate String TMatriKSDbHelp();
liebe Grüße
Mario
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
27.974 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 4. Apr 2012, 11:00
Beim PChar als Result muß man aber auch etws aufpassen,
nicht daß der "verlinkte" Text plötzlich weg ist, nach dem Beenden der Funktion, und der PChar dann ins Nichts zeigt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von EWeiss
EWeiss

Registriert seit: 16. Okt 2010
2.010 Beiträge
 
#6

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 4. Apr 2012, 13:28
Schau mal hier vielleicht hilft es dir.
Dimmed Sample

Allerdings lade ich die DLL nicht dynamisch und erstelle eine Wrapper_Class um die DLL.
Dieser Wrapper(DLL) wird dann als Reference ins Projekt eingebunden.

gruss

Geändert von EWeiss ( 4. Apr 2012 um 13:30 Uhr)
  Mit Zitat antworten Zitat
Horst0815

Registriert seit: 23. Mai 2011
Ort: Görlitz
106 Beiträge
 
Delphi XE Starter
 
#7

AW: Delphi-Win32-DLL-Funktion mit Result Boolean wirft eine AccessViolationException

  Alt 16. Apr 2012, 13:08
Ändere mal
DbOpen = function: Boolean; stdcall; in

DbOpen = function: LongBool; cdecl;
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2014 by Daniel R. Wolf