AGB  ·  Datenschutz  ·  Impressum  







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

VB_NET Parameter zuweisen

Ein Thema von EWeiss · begonnen am 14. Dez 2009 · letzter Beitrag vom 15. Dez 2009
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: VB_NET Parameter zuweisen

  Alt 14. Dez 2009, 21:33
Zitat:
Dann hast du in den Projektoptionen unter "Build" "anyCPU" als CPU-Plattform stehen.
Da deine DLL aber in Delphi geschrieben ist, und wir hier (nur) von Windows reden, wird sie wohl nur von einem 32Bit Prozess aus geladen werden können.
AnyCPU heißt, dass der JIT-Compiler die Anwendung auf einem x64 System mit 64Bits, auf einem 32Bit-System mit 32Bit erzeugen wird.
Wenn du dort x86 einträgst, ist es immer 32Bit und wird einfach gehen.
Nein ich habe dort x86 eingetragen nicht AnyCPU das mag VB.NET gar nicht wenn da was nicht stimmt
und quittiert das mit einen Fehler.

Zitat:
Was du willst, ist eine Classlibrary anlegen, die deine DLL vernünftig verpackt.
Also wohl nicht nur die Funktionen importiert, weil dass können die Devs einfach selbst.
Sondern diese Imports vernünftig in hübsche Klassen verpacken.
Und mit solchen Konstanten braucht man in .Net gar nicht anfangen. Unterstriche sind in den .Net API Guidelines mehr als nur ungern gesehen. Und numerische Konstanten löst man mit Enums. (wie du es ja in Delphi auch hast)
Du hast doch die API für Delphi oben gesehen diese verwende ich in irgendeinen Delphi Projekt(Anwendung) um mit meiner DLL zu kommunizieren
Nichts anderes soll die API für VB.NET machen.

Zitat:
Was du willst, ist eine Classlibrary anlegen, die deine DLL vernünftig verpackt
Ich weiss nicht was du damit meinst . Sorry
Ich mache doch nichts anderes als die Exports meiner DLL in eine Classe zu packen damit man von VB.NET auf diese zugreifen kann.

Etwas Konfus das ganze für mich.

gruss Emil
Miniaturansicht angehängter Grafiken
compiler_140.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: VB_NET Parameter zuweisen

  Alt 15. Dez 2009, 03:33
Ok ich hab jetzt eine Managed DLL geschrieben wo man mit VB.NET und C# draufzugreifen kann.
Ist nicht das was ich wollte nur für die API eine zusätzliche DLL zu verwenden aber erst mal egal..

Hab jetzt aber ein Probelm ..
Code:
       
[DllImport("bass_vis.dll", EntryPoint="BASSVIS_Free", CharSet=CharSet.Auto)]
public static extern bool BASSVIS_Free(BASSVIS_PARAM param, BASSVIS_PARAM mbase);
Code:
namespace BassVis_Api
{
    using System;
    using System.Runtime.InteropServices;

    [Serializable, StructLayout(LayoutKind.Sequential)]
    public sealed class BASSVIS_PARAM
    {
        public int VisHandle;
        public IntPtr VisGenWinHandle;
        public BASSVISKind Kind;
        public BASSVIS_PARAM(BASSVISKind kind)
        {
            this.Kind = kind;
            this.VisHandle = 0;
            this.VisGenWinHandle = IntPtr.Zero;
        }

        public BASSVIS_PARAM(BASSVISKind kind, int visHandle)
        {
            this.Kind = kind;
            this.VisHandle = visHandle;
            this.VisGenWinHandle = IntPtr.Zero;
        }
    }
}
Mein Aufruf
Code:
BassVis.BASSVIS_Free(mVisParam, mBase);
Ich übergebe nach dem start des Plugin mBase.Vishandle das Handle von mVisParam.VisHandle
Wenn der Visualisierungthread in BassVis beendet ist setze ich mBase auf 0

So kann man gegenprüfen ob die Plugins entladen und das Handle = 0 ist.

Jetzt meldet mir C# das mBase immer null ergibt
Was muss ich machen bzw.. verlinken damit C# erkennt das ein wert zurückgegeben wird auch wenn er nur 0 ist.

Zitat:
Dem Feld "BassVisExample.Form1.mBase" wird nie etwas zugewiesen, und es hat immer seinen Standardwert von "null".
Ich weise aber mBase doch ein Handle zu wie kann das dann null sein.

Irgenwie aktzeptiert er nicht das ich zwei Parameter des gleichen Typs in einer Funktion habe.
Code:
private BASSVIS_PARAM mVisParam;
private BASSVIS_PARAM mBase;
gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: VB_NET Parameter zuweisen

  Alt 15. Dez 2009, 09:00
Erstmal fällt mir auch, dass du eine Klasse deklariert hast (soweit ich den VB Code da oben lesen kann, war's da ein struct)

Dann: Oben hast du ein byref stehen - das musst du in C# auch extra angeben (ref Schlüsselwort). Wobei das hier fast keinen Unterschied macht, da es ja eine Klasse ist.

Was mir jetzt so aufgefallen ist
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: VB_NET Parameter zuweisen

  Alt 15. Dez 2009, 10:17
Zitat von jfheins:
Erstmal fällt mir auch, dass du eine Klasse deklariert hast (soweit ich den VB Code da oben lesen kann, war's da ein struct)

Dann: Oben hast du ein byref stehen - das musst du in C# auch extra angeben (ref Schlüsselwort). Wobei das hier fast keinen Unterschied macht, da es ja eine Klasse ist.

Was mir jetzt so aufgefallen ist
Mit dem ref dürfte das gehn..
Allerdings nur bei mBase

Freigeben
Code:
if (mVisParam.VisHandle != 0)
{
    BassVis.BASSVIS_Free(mVisParam, ref mBase);
    mBase = new BASSVIS_PARAM(mVisParam.Kind);
    mVisParam.VisHandle = mBase.VisHandle;
}
Neues Handle übergeben
Code:
mBase = new BASSVIS_PARAM(mVisParam.Kind, mVisParam.VisHandle);

Danke.

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:35 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