INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Fatal Error:LabVIEW.LIB could not locate "PostLVUserEven"



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

18.09.2009, 13:09
Beitrag #5

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Fatal Error:LabVIEW.LIB could not locate "PostLVUserEven"
' schrieb:PostLVUserEvent() ist eine C Manager Funktion in LabVIEW. LabVIEW.LIB ist so gemacht dass es alle manager Funktionen dynamisch linkt, d.h erst wenn sie zum ersten Mal aufgerufen werden. Dazu stellt es das aufrufende LabVIEW Module fest - LabVIEW.exe (oder lvrt.dll für eine Applikation) - und macht dann ein GetProcAddress für die entsprechende Funktion. Da der Fehler von LabVIEW.LIB kommt muss es von einer C Routine kommen, also eine DLL die irgendwo in Deinem Code eingebunden wird.

PostLVUserEvent() ist eine ziemlich advanced Funktion also entweder rufst Du eine NI DLL irgendwo auf oder Du hast Dir irgendwo eine entsprechende DLL hergeholt. Kann es sein dass Du versuchst eine DLL die eigentlich für LabVIEW gedacht ist in einem nicht LabVIEW Kontext auszuführen (beispieslweise einem Executable dass dann über Remoting, Out of Process ActiveX oder was auch immer) irgendwie in LabVIEW integriert wird)?

Oder Deine abstrakten Klassen machen das LabVIEW Environment so spezial dass LabVIEW.lib in Deiner DLL die LabVIEW Runtime nicht mehr lokalisieren kann.

Rolf Kalbermatter
Also die einzige DLL die ich dynamisch lade ist eine von einem Kamerahersteller. Also keine NI DLL. Mein Code ist eigentlich gar nichtmal so kompliziert. Ich mache mal ein vereinfachtes Bsp.:
Abstrakte Klasse:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>class cam_interface
{
public:
Abstract_Cam_Interface();
virtual ~Abstract_Cam_Interface();
virtual int Connect()= 0;
}
</div>
Kamaeraklasse:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>class Kamera : public virtual cam_interface
{
private:
Cam_DLL_Fcts FctAddr; // Struktur für die Einsprungadressen.
public:
// Auf Konstruktor und Destruktor habe ich fürs Forum verzichtet.
int Connect();
}</div>
Zugehörige CPP:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>int Kamera::Connect()
{
HINSTLIB Lib = LoadLibrary("cam.dll")
if(Lib)
{

Kamera::FctAddr.GetSources = (irb_GetSources)GetProcAddress(Lib, "cam_GetSources");
Kamera::FctAddr.InitSource = (irb_InitSource)GetProcAddress(Lib, "cam_InitSource");
Kamera::FctAddr.CloseSource = (irb_CloseSource)GetProcAddress(Lib, "cam_CloseSource");
Kamera::FctAddr.Grab = (irb_Grab)GetProcAddress(Lib, "cam_Grab");
}

this->GetFctAddr().GetSources(&SrcID); // Adresse auf Variable welche mit der SourceID beschrieben wird.
this->InitSource(SrcID); // Verbindungsaufbau mit der Quelle.
this->Grab(void* buf); // buf wurde vorher mit new allociert.
TD1Hdl LVMem = NULL; // Struktur wurde vorher angelegt.
NumericArrayResize(uW, 1L, SizeX*SizeY); // SizeX SizeY entspricht der Kameraauflösung.
(*LVMem)->DimSize = SizeX*SizeY;
MoveBlock(buf, &LVMem.Elements, sizeof(unsigned short int) * SizeX * SizeY)
PostLVUserEvent(Ref, &LVMem); // Ref wurde vorher von LV Übergeben.

return this->CloseSource(SrcID);
}
}
</div>
DLL Main:
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>
extern "C" __declspec(dllexport) int Connect()
{
Kamera Cam; // Objekt der Klasse erzeugen.
Abstract_Cam_Interface *Interface = &Cam; // Interfacepointer anlegen.
return Interface->Connect(); // Funktion ausführen.
}
</div>
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Nachrichten in diesem Thema
Fatal Error:LabVIEW.LIB could not locate "PostLVUserEven" - abrissbirne - 18.09.2009 13:09

Gehe zu: