AGB  ·  Datenschutz  ·  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
Thema durchsuchen
Ansicht
Themen-Optionen

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
7 Beiträge
 
Delphi 6 Enterprise
 
#1

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

  Alt 3. Apr 2012, 12: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
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 3. Apr 2012, 12: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
44.062 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 3. Apr 2012, 12: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,
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
MarioR

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

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

  Alt 4. Apr 2012, 10: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
44.062 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 4. Apr 2012, 12: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

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

  Alt 4. Apr 2012, 14:28
Schau mal hier vielleicht hilft es dir.
http://www.delphipraxis.net/1159521-post31.html

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 14:30 Uhr)
  Mit Zitat antworten Zitat
Horst0815

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

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

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

DbOpen = function: LongBool; cdecl;
  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 10:55 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