' schrieb:Nicht immer sind Fehlermeldungen richtig. Will sagen, wenn da steht "LIB could not locate", dann heißt das noch lange nicht, dass das auch genau so stimmt. Möglicherweise hat der MoveBlock (bah, wer verwendet denn solche Befehle) was überschrieben.
Diese Fehlermeldung ist aber schon in LabVIEW.LIB und tritt genau dann auf wenn LabVIEW nicht die entsprechende Funktion mit LoadLibrary() laden kann. MoveBlock() könnte da eher wenig machen, oder er müsste die Exporttabelle des LabVIEW Kernels (LabVIEW.EXE oder lvrt.dll) selber überschreiben. Sehr unwahrscheinlich dass er dabei nur diese eine Funktion erwischt und nicht noch weiss ich was alles andere.
Warum dann schon diese eine Funktion nicht verfügbar ist, aber nicht die anderen wie MoveBlock() oder NumericArrayResize() ist schon etwas komisch. Das verwirrt mich tatsächlich ziemlich.
Mit MoveBlock() ist übrigens nichts falsch. Da kann man natürlich weiss nicht was alles versuchen um so eine Funktion sicherer zu machen, aber keine Variante schützt zuverlässig davor einen verkehrten Parameter zu benützen. Das Windows API kennt zum Beispiel Funktionen wie BadPtr() die einmal in Windows 3.x Zeiten eingeführt wurden. Scheint eine wunderbare Funktion zu sein, aber erstens hat sie Threadingprobleme (ja Windows 3.1 war halt nicht Multithreading), die Performance ist katastrophal, und die Implementation beruht intern doch nur auf Exceptions. Kann man alles auch viel einfacher haben indem man direkt Exceptions verwendet. Aber das fängt halt immer noch nur NULL Pointer und Pointer ausserhalb des gültigen Prozessheaps ab. Ein Pointer der zufällig irgendwo in den gültigen Prozessheap weist wird immer noch als gültig erkannt.
Natürlich kann man auch alle Memorybereiche objektialisieren und nur noch Memberfunktionen dieser Objekte darauf zulassen, aber man kann auch mit Kanonen auf Spatzen schiessen.
Rolf Kalbermatter