AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi nach C#

Ein Thema von EWeiss · begonnen am 15. Aug 2011 · letzter Beitrag vom 16. Aug 2011
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Delphi nach C#

  Alt 15. Aug 2011, 18:15
Delphi-Quellcode:
  PBASSVIS_PLUGINS = ^TBASSVIS_PLUGINS;
  TBASSVIS_PLUGINS = record
    PluginHandle : HVIS; // Plugin Handle
    PluginPath : string; // Plugin Name mit Pfad
    PluginName : string; // Plugin Name ohne Pfad
    ModuleCount : integer; // Module Preset Count
    ModuleName : array of string; // Module Preset Name
  end;


Mein Anfang!
Code:
    [Serializable, StructLayout(LayoutKind.Sequential)]
    public sealed class BASSVIS_PLUGINS
    {
        public int PluginHandle;
        [MarshalAs(UnmanagedType.LPStr)]
        public string PluginPath = string.Empty;      
        [MarshalAs(UnmanagedType.LPStr)]
        public string PluginName = string.Empty;        
        public int ModuleCount;
        [MarshalAs(UnmanagedType.LPStr)]
        public string[,] ModuleName;
        public BASSVIS_PLUGINS(BASSVIS_PLUGINS[,] Plugins)
        {
        }
    }
Delphi-Quellcode:
function BASSVIS_GetPlugins(
  Kind: TBASSVIS_KIND_T;
  PluginPath: PAnsiChar;
  Searchflags: DWORD
): TPlugins; stdcall; external dllfile;
Code:
//BASSVIS_GetPlugins
[return: MarshalAs(UnmanagedType.Struct)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_GetPlugins", CharSet = CharSet.Auto)]
private static extern BASSVIS_PLUGINS[,] BASSVIS_GetPlugins(BASSVISKind kind, [In, MarshalAs(UnmanagedType.LPStr)] string PluginPath, BASSVISFindFlags BASSVIS_FIND_DEFAULT);
TPlugins = array of TBASSVIS_PLUGINS
Code:
public BASSVIS_PLUGINS(BASSVIS_PLUGINS[,] Plugins)
EDIT:
Bin mir aber nicht sicher ob das alles seine richtigkeit hat.

gruss

Geändert von EWeiss (15. Aug 2011 um 19:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi nach C#

  Alt 15. Aug 2011, 19:40
Gibt es einen speziellen Grund, dass du nicht einfach Bass .NET benutzt?

Laut Beschreibung sollten doch alle Addons dabei sein.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Delphi nach C#

  Alt 15. Aug 2011, 20:00
Gibt es einen speziellen Grund, dass du nicht einfach Bass .NET benutzt?

Laut Beschreibung sollten doch alle Addons dabei sein.
Weil die Library Bass_Vis von mir in Delphi geschrieben wurde.
Und Bass.NET diese nicht unterstützt da ich meinen eigenen NET.Wrapper habe.

Das dauert zwar solche sachen wie hier zu Konvertieren damit bin ich aber unabhängig.

Sorry deine Frage hilft mir aber nun wirklich nicht weiter.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Delphi nach C#

  Alt 15. Aug 2011, 20:19
Hätte ja sein können, dass du das nicht kennst.

Gut, also was mir auf den ersten Blick auffällt ist, dass da das stdcall fehlt. In DllImport muss noch stehen:
Code:
CallingConvention=CallingConvention.StdCall
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Delphi nach C#

  Alt 15. Aug 2011, 20:34
Hätte ja sein können, dass du das nicht kennst.

Gut, also was mir auf den ersten Blick auffällt ist, dass da das stdcall fehlt. In DllImport muss noch stehen:
Code:
CallingConvention=CallingConvention.StdCall
Ahh Danke werd es mal addieren und sehen was bei rum kommt.

Bekomme jetzt diese Meldung nach meiner Änderungen.
Zitat:
An unhandled exception of type 'System.Runtime.InteropServices.MarshalDirectiveEx ception' occurred in BassVisAPI.Net.dll
Additional information: "return value" kann nicht gemarshallt werden: Ungültige verwaltete/nicht verwaltete Typenkombination..
Code:
private BASSVIS_PLUGINS[,] Plugins;
Code:
Plugins = BassVis.BASSVIS_GetPlugins((BASSVISKind)cbVisType.SelectedIndex, PluginDir, true);
if (Plugins != null)
{
  foreach (BASSVIS_PLUGINS p in Plugins)
  {
    string name = Path.GetFileName(p.PluginPath);
    string path = Path.GetDirectoryName(p.PluginPath);

    lstPlugins.Items.Add(name);
    pluginPathList.Add(path);
  }
}
Meine Änderung!
Code:
//BASSVIS_GetPlugins
public static BASSVIS_PLUGINS[,] BASSVIS_GetPlugins(BASSVISKind kind, string pluginPath, bool recursive)
{
  BASSVIS_PLUGINS[,] Plugins = BASSVIS_GetPlugins(kind, pluginPath, recursive ? BASSVISFindFlags.BASSVIS_FIND_RECURSIVE : BASSVISFindFlags.BASSVIS_FIND_DEFAULT);
  return Plugins;
}
[return: MarshalAs(UnmanagedType.LPArray)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_GetPlugins", CharSet = CharSet.Auto)]
private static extern BASSVIS_PLUGINS[,] BASSVIS_GetPlugins(BASSVISKind A_0, [In, MarshalAs(UnmanagedType.LPStr)] string A_1, BASSVISFindFlags A_2);
ObjectBrowser..
Code:
public static BassVis_Api.BASSVIS_PLUGINS[,] BASSVIS_GetPlugins(BassVis_Api.BASSVISKind kind, string pluginPath, bool recursive)
    Member of BassVis_Api.BassVis
PS:
Hat leider nichts gebracht gleicher Fehler wie oben.
Hätte mich auch gewundert da ich in allen meinen Funktionen das stdcall nicht addiert habe.
Und diese Funktionieren. (Aber ein versuch konnte ja nicht schaden )

Neuer versuch..
Code:
[return: MarshalAs(UnmanagedType.SafeArray)]
Jetzt hat er nach dem Einsprungspunkt in der DLL gefragt. DLL ersetzt nächster Fehler.

Zitat:
An unhandled exception of type 'System.ExecutionEngineException' occurred in BassVisAPI.Net.dll
Verdammt schwierig

gruss

Geändert von EWeiss (15. Aug 2011 um 23:02 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Delphi nach C#

  Alt 16. Aug 2011, 00:13
Soweit habe ich es schon mal..

Code:
#region Winamp

if (index == Convert.ToInt32(BASSVISKind.BASSVISKIND_WINAMP))
{

  Plugins = BassVis.BASSVIS_GetPlugins((BASSVISKind)cbVisType.SelectedIndex, PluginDir, true);
  if (Plugins != null)
  {
    foreach (BASSVIS_PLUGINS p in Plugins)
    {
      string name = Path.GetFileName(p.PluginPath);
      string path = Path.GetDirectoryName(p.PluginPath);

      lstPlugins.Items.Add(name);
      pluginPathList.Add(path);
    }
       
    lstPlugins.SelectedIndex = 0;

    mVisParam.VisHandle = Plugins[lstPlugins.SelectedIndex].PluginHandle;
    int NumModule       = Plugins[lstPlugins.SelectedIndex].ModuleCount;
    string Pluginname   = Plugins[lstPlugins.SelectedIndex].PluginName;

    if (!(NumModule > 0))
    {
      return;
    }                   
    Descript.Text = Pluginname;

    for (int IntI = 0; IntI <= (NumModule - 1); IntI++)
    {
      VisModules.Items.Add(Plugins[lstPlugins.SelectedIndex].ModuleName);
    }

    if (NumModule > 0)
    {
      VisModules.SelectedIndex = 0;
    }

    if (Stream != 0 && NumModule == 1)
    {
      cmdStartVis_Click(null, null);
    }
  }
}

#endregion Winamp
Aber immer noch einen Fehler.
Code:
Plugins = BassVis.BASSVIS_GetPlugins((BASSVISKind)cbVisType.SelectedIndex, PluginDir, true);
Zitat:
An unhandled exception of type 'System.ExecutionEngineException' occurred in BassVisAPI.Net.dll
Die Ausnahme, die bei einem internen Fehler im Ausführungsmodul der Common Language Runtime ausgelöst wird. Die Klasse kann nicht vererbt werden.

Hatte ein 2Dimensionales Array [,] das war schon mal falsch.
Was soll da falsch sein das die Klasse nicht vererbt wird?

Code:
//BASSVIS_GetPlugins
public static BASSVIS_PLUGINS[] BASSVIS_GetPlugins(BASSVISKind kind, string pluginPath, bool recursive)
{
  BASSVIS_PLUGINS[] Plugins = BASSVIS_GetPlugins(kind, pluginPath, recursive ? BASSVIS_FINDFLAGS.BASSVIS_FIND_RECURSIVE : BASSVIS_FINDFLAGS.BASSVIS_FIND_DEFAULT);
  if (Plugins != null)
  {
    return Plugins;
  }
  return null;
}
[return: MarshalAs(UnmanagedType.SafeArray)]
[DllImport("bass_vis.dll", EntryPoint = "BASSVIS_GetPlugins", CharSet = CharSet.Auto)]
private static extern BASSVIS_PLUGINS[] BASSVIS_GetPlugins(BASSVISKind kind, [In, MarshalAs(UnmanagedType.LPStr)] string pluginPath, BASSVIS_FINDFLAGS recursive);
An der Überladenen Function kann es eigentlich nicht liegen.

Hmm....

gruss

Geändert von EWeiss (16. Aug 2011 um 00:19 Uhr)
  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 21:14 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