![]() |
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Statt AnsiString vielleicht WideString ... .NET sollte doch auch mit einem
![]() Zumindestens ist es keine gute praktische Idee Delphi-Typen zu tauschen. PAnsiChar, PWideChar oder eben BSTR, wobei Letzerer seine eigene Speicherverwaltung hat, welche von beiden Systemen angesprochen werden kann. [edit] Ups, TiGü übersehn. :oops: |
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Zitat:
|
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
bsp. von meiner LIB
*.dll
Delphi-Quellcode:
managed dll C#
function BASSVIS_GetVersion: PAnsiChar; stdcall;
const cverfor = '%d.%d.%d.%d'; var ver : TBASSVIS_VERSION; str : string; begin ver := GetVersionNumber; str := format(cverfor,[ver.Major,ver.Minor,ver.Special,ver.Build]); result := PAnsiChar(Ansistring(str)); end;
Code:
Aber er scheint ja seine Lösung gefunden zu haben.
//BASSVIS_GetVersion
public static string BASSVIS_GetVersion() { IntPtr ptr = BASSVIS_GetVersionPtr(); if (ptr != IntPtr.Zero) { return Marshal.PtrToStringAnsi(ptr); } return null; } [DllImport("bass_vis.dll", EntryPoint = "BASSVIS_GetVersion", CharSet = CharSet.Auto)] private static extern IntPtr BASSVIS_GetVersionPtr(); gruss |
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Statt Boolean könnte auch noch ByteBool, WordBool oder LongBool verwendet werden.
LongBool = BOOL (4 Bytes) im C++, was es irgendwie bestimmst auch im C# gibt. |
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Zitat:
gruss |
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Zitat:
|
AW: Aufruf Delphi-Dll von DotNet, Probleme mit struct-Parameter
Was mir noch auffällt du solltest den String initialisieren..
Code:
Scheint irgendwie alles nur Halbfertig!
[MarshalAs(UnmanagedType.LPStr)]
public string Waehrung = string.Empty; [MarshalAs(UnmanagedType.Bool)] public bool P39A3; Zudem solltest du dir überlegen von der Struct abzuweichen und statt dessen eine Class verwenden. ![]()
Code:
[Serializable, StructLayout(LayoutKind.Sequential)]
public sealed class TPara1Rec ![]() gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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