Hallo zusammen,
ich weiss nicht ob ich im richtigen Bereich bin.
Kann ja sein, dass ich mich in der Richtung DLL-> LabView befinde - dann bitte verschieben.
Ich habe ein VI, welches SubVi's nutzt.
Dieses wurde durch den Application Builder als "Shared DLL" (nicht Interop) kompiliert.
Bei Quelldateien -> Prototyp festlegen habe ich:
<Void>
<Name>returnvalue</Name>
</Void>
IPSupplyGETCurrent(Bool Start, out Bool End, Cluster FehlerEingang, out Cluster FehlerAusgang)
Somit erscheint mir im Header-File im Build Ordner als
Code:
#include "extcode.h"
#pragma pack(push)
#pragma pack(1)
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
LVBoolean status;
int32_t code;
LStrHandle source;
} TD1;
void __stdcall IP_Supply_GET_Current(TD1 *FehlerEingang, LVBoolean *Start,
TD1 *FehlerAusgang, LVBoolean *End);
long __cdecl LVDLLStatus(char *errStr, int errStrLen, void *module);
#ifdef __cplusplus
} // extern "C"
#endif
#pragma pack(pop)
Wie kann ich die nun in C# importieren?
Stand bisher:
class IP_Supply_GET_Current
{
[DllImport("C:\\Users\\test\\SharedLib.lib",
EntryPoint = "Test",
CharSet = CharSet.Auto,
CallingConvention = CallingConvention.Cdecl)]
public static extern unsafe IP_Supply_GET_Current(
noch unbekannt... )
Würde mich freuen wenn hier eine interessante Diskussion dazu entstehen könnte.
Im Developer-Bereich bei NI werde ich nicht wirklich fündig, jedoch ist das Thema keine Randerscheinung.
Gruß
Da nicht weiß wie man editiert hier eine Verbesserung des oberen Posts:
Natürlich schauts bei der Shared-DLL im Application-Builder (2010) so aus:
void IP_Supply_GET_Current(TD1 *FehlerEingang, LVBoolean *Start, TD1 *FehlerAusgang, LVBoolean *End)
Einstellung: C-Aufrufkonvention