tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
364
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    Hallo,
    ich verusche gerade eine in vb6 erstellte dll in vb.net einzubinden.
    leider bekomme ich beim aufruf einer funktion immer den fehler
    COMExcedure wurde nicht behandelt.
    Invalid procedure call or argument

    ich verstehe nicht wo genau der fehler liegen kann, da die dll in vb6 funktioniert. und es doch eigendlich nur noch maschinensprache ist, also keine vb befehle mehr enthält oder?
    also man könnte doch auch eine c/c++... dll in vb oder umgekehrt einbinden

    danke
     

  2. #2
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    die DLL als Verweis (Reference) eingefügt oder?
    Dann müsste in den Verweisen jetzte eine Art meineDll.Interop.DLL sein, diese kannst dir ja mal im ObjectBrowser anschaun (doppelklick auf die DLL) und schaun was für Parameter die Funktion braucht.

    Die Funktion selber müsste auch in einer (VB6) Klasse sein, Module kann man glaube zum Beispiel nicht ansprechen.

    Aber sieht eher so aus als wenn ein Parameter einen falschen Wert liefert.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  3. #3
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    hallo danke

    im objectbrowser stehen die module drin, aber irgendjemand hat da ein
    _IID_ vor den namen geschrieben
    also _IID_Modulname
    wenn ich dann auf das plus neben den ordner klicke steht da
    1[NEUTRAL]


    Aber sieht eher so aus als wenn ein Parameter einen falschen Wert liefert.
    das glaube ich nicht, da es egal ist was für eine funktion ich aufrufe, ich bekomme immer den selben fehler

    danke
    Geändert von FJK (29.01.08 um 16:29 Uhr)
     

  4. #4
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Könntest du mal die Funktion posten wie sie im Objekt Browser ausschaut und wie du die Funktion in.Net aufrufst.
    Hab bisher nur VB6 Klassen in .Net verwendet und die liefen meistens fast Reibungslos.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  5. #5
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    also im objectbrowser sehe ich keine funkiton
    aufrufen mache ich das

    global
    Dim Test As Classenname.Modulname

    in der form load

    Test = new Classenname.Modulname

    eigendlicher aufruf

    Test.Funktionsname
     

  6. #6
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    ehm ich meinte so wie du es wirklich aufrufen willst, nicht irgend ein Beispiel.

    Und wie du siehst im ObjectBrowser die Funktion nicht?
    Wenn er keine anzeigt, dann kannst du doch eigentlich auch nicht auf die drauf zugreifen
    (außer isn Bug, ist mir aber so nur bekannt wenn die DLLs nicht lokal liegen)
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  7. #7
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    ich rufe die genau so auf,

    im objektbrowser sehe ich nur den dll namen und die classen die die dll beinhaltet, aber keine funktionen, variablen... in den classen

    danke
     

  8. #8
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    komischer Aufruf

    und die Funktion in VB6 selber ist als public function deklariert?
    Vielleicht stimmt einfach der Modifierer in VB nicht (nicht public deklariert).

    Wenn nicht zu umfangreich könntest du ja den VB Code mal posten.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  9. #9
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    guten morgen,
    ich fürchte das darf ich nicht

    die funktionen sind alle auf public,
    die klassen habe ich mit Multiuse und GlobalMultiuse versucht

    Vielleicht stimmt einfach der Modifierer in VB nicht (nicht public deklariert).
    könntest du mir das bitte nochmal genauer erklären?

    Edit:
    ich habe gerade eine neue dll erstellt, mit zwei klassen
    und einer einfachen additions funktion,

    class2
    Code :
    1
    2
    3
    4
    5
    
    Public Function Add(i As Double, j As Double)
     
        Add = i + j + 2
     
    End Function

    ich kann mit

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim g As Project1.Class2
            g = New Project1.Class2
            Dim b As Double
     
            b = g.Add(1, 2)
     
        End Sub

    draufzugreifen und bekomme auch richtige werte zurück
    im objectbrowser sehe ich jedoch nur die classen aber keine enthaltenen funktionen
    hab auch nichts an der grundeinstellung der dll geändert

    danke
    Geändert von FJK (30.01.08 um 09:03 Uhr)
     

  10. #10
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    Im Prinzip meinte ich das was du schon beantwortest hast, ob die Funktion public ist.

    Laut deiner weiteren Anführungen stehe ich jetzt wieder da wo ich am Anfang stand, das ein Argument falsch übergeben wird.

    Irgendwie kann man auch in .Net beim debuggen in VB6 weiter debuggen, aber wie das geht hab ich vergessn
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

  11. #11
    FJK FJK ist offline Mitglied Gold
    Registriert seit
    May 2004
    Beiträge
    171
    hmm danke

    kann das sein das in der dll, vb6 spezifischer code ist, so das .net nichts damit anfangen kann?

    die classen greifen intern auf module und andere classen in der dll zu, kann das vieleicht auch ein fehlergrund sein
     

  12. #12
    Avatar von Spyke
    Spyke Spyke ist offline Capoeirista
    Registriert seit
    Oct 2002
    Beiträge
    931
    soweit habe ich mich noch nicht damit beschäftigt,
    ich weiß nur das es die VB Collection in .Net nicht gibt, falls ev. deine Funktion solche eine Collection erwartet, solltest du in VB 6 eine neue Funktion anlegen und dort intern die Collection setzen.

    Oder falls du ein Array übergibst könnte es natürlich auch dort an den Indexer liegen, VB 6 beginnt glaube standardmäßig bei 1.

    Und ich glaube es gab noch irgendwas mit nothing zu beachten aber da fält mir jetzt nicht ein was es war.

    Und dann gibt es noch folgende Typen unterschiede:
    VB6 - .Net
    Double - Float
    Long - Int
    ....
    Also was in VB 6 double ist, ist in .Net Float oder in VB 6 Long ist in .Net int ...
    Hab jetzt keine IDE hier um das fortzusetzen
    Aber ich denke mal bei den Typen hätte er schon beim kompilieren meckern müssen.

    Ansonsten müsste .Net relativ egal sein was VB 6 intern noch alles für Modul aufruft.
    Könnte natürlich sein das ein Modul ein Objekt verwenden will welches garnicht instaziiert wurde, vielleicht mal die Funktion selber in nem extra VB 6 Programm testen.
     
    www.iv-interactive.de - Projektewebsite
    WikiParser - aktuelles Projekt

Ähnliche Themen

  1. Permanent Fehler beim Ausführen einer Datei
    Von DrMueller im Forum .NET Application und Service Design
    Antworten: 11
    Letzter Beitrag: 13.07.10, 15:32
  2. Fehler beim Ausführen von Query
    Von Tobbes im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 30.06.06, 12:35
  3. Antworten: 5
    Letzter Beitrag: 20.02.06, 19:36
  4. Fehler beim ausführen..Speicherstelle?
    Von TwoFaze im Forum C/C++
    Antworten: 9
    Letzter Beitrag: 11.10.05, 14:53
  5. Antworten: 1
    Letzter Beitrag: 12.05.02, 19:30