Zwei genau gleichen Codes, einer geht, der andere nicht?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Zwei genau gleichen Codes, einer geht, der andere nicht?

    Hallo,

    Habe mein projekt vor einiger zeit auf 64bit umgestellt.
    jetzt ist mein projekt eigentlich fertig muss nun aber doch auf 32 bit laufen, also wieder zurück gestellt. jetzt geht der vindungsaufbau zur USB karte nicht mehr.
    habe das alte Prjekt raus gesucht das geht noch. muss also irgend was umgstellt haben, weis aber bei besten willen nicht was. habe schon alles verglichen was mir so eingefallen ist.



    VB.NET-Quellcode

    1. [vbnet]
    2. Dim Number As Integer
    3. Dim n As Integer
    4. Dim CardAddress As Integer
    5. Private Declare Function OpenDevice Lib "k8061.dll" () As Integer
    6. Public Sub Verbinden()
    7. MsgBox("hallo0")
    8. Dim h As Integer
    9. MsgBox("hallo1") ' bis hier hin geht alles
    10. h = OpenDevice()
    11. MsgBox("hallo2") ' das hier kommt schon nicht mehr.
    12. Select Case h
    13. Case 0, 1, 2, 3, 4, 5, 6, 7
    14. MsgBox("1")
    15. CardAddress = h
    16. MsgBox("2")
    17. Case -1
    18. MsgBox("Alle verbunden")
    19. Case -2
    20. MsgBox("Keine Karte")
    21. End Select
    [/vbnet]


    Es kommt keine fehlermeldung, das programm läüft weiter.... und führt den nexten "sub" einfach aus. bei dem alten geht noch alles?+ ;(







    edit:

    Habe nun erstmal da eine feste adresse eingeben, dann leuft er bis er das nexte mal auf die dll. zugraifen muss dann kommt "Es wurde versucht eine datei im falschen format zu laden"

    das kommt aber nur bei dem neuen Projekt. was könnte das für eine einstellung sein?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KAXTJ“ ()

    Wenn ich das richtig sehe werden diese Bedingungen doch nie erfüllt oder?

    VB.NET-Quellcode

    1. Select Case h
    2. Case 0, 1, 2, 3, 4, 5, 6, 7
    3. MsgBox("1")
    4. CardAddress = h
    5. MsgBox("2")
    6. Case -1
    7. MsgBox("Alle verbunden")
    8. Case -2
    9. MsgBox("Keine Karte")
    10. End Select

    Es kommt keine fehlermeldung, das programm läüft weiter

    Bist du mal durch das Programm durchgesteppt und hast geschaut was h = OpenDevice() da der Integer ist?
    @KAXTJ Solange Du nicht auf 32- oder 64-Bit-spezifische DLLs zugreifst, ist es Deinem Programm egal, ob es unter 32 oder 64 Bit läuft.
    Wenn Du auf eine DLL falschen Formats zugreifst, kommt eine entsprechende Exception.
    Setze also einen Haltepunkt auf die Zeile h = OpenDevice() und berichte, was passiert, wenn Du den Rat von @Kameo befolgst und Dein Programm durchsteppst.
    Mit anderen Wortren: Lerne zu debuggen: Debuggen, Fehler finden und beseitigen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Beim durchsteppen, Kommt an dieser stelle einfach eine 0
    Aber ob die jetzt wirklich ausgewertet ist, oder der standart wert des integer ist, kann man sich streiten... da die 0 in meinem aufbau zutreffend ist.

    zum Tehma Dll ja es gibt eine 32 und eine 64 bit dll. habe diese wieder auf 32 bit getauscht. und seid dem das problem. und wie gesagt der code ist zwei mal gleich.


    Habe das Problem aber gestern abend noch gefunden. "32 Bit Bevorzugen" musste aktiviert werden. (interresanter weise nur in der neuen version, die alte läuft ohne den haken, des wegen bin ich nicht drauf gekommen.


    EDIT:
    Ich kann debuggen :)) für alle die sich wegen den msg boxen wundern, die sind drin damit ich es auf dem späteren Computer fervolgen kann, zu mindest in der versuch vase, den der hat kein VB :)

    KAXTJ schrieb:

    Aber ob die jetzt wirklich ausgewertet ist, oder der standart wert des integer ist, kann man sich streiten

    Das lässt sich gaz einfach rausfinden mit:

    VB.NET-Quellcode

    1. Dim h As Integer = -999
    2. h = OpenDevice()
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    KAXTJ schrieb:

    "32 Bit Bevorzugen" musste aktiviert werden.
    heißt, Du arbeitest mit 32 Bit.
    Wenn beide Sorten DLLs vorliegen (32 und 64 Bit) musst Du beide Deinem Projekt als Mwember hinzufügen, pack sie in 2 Verzeichnisse, z.B. DLLx86 und DLLx64, diese Verzeichnisse mit dem Studio erzeugen.
    Gib alle DLLs die Property "Kopieren wenn neuer".
    Füge im PostBuildStep einen Copy-Befehl hinzu, so dass die richtige DLL neben die Exe kopiert wird, etwa so (das funktioniert mit eben diesen Verzeichnisnamen):
    copy $(TargetDir)DLL$(PlatformName)\*.dll $(TargetDir)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!