Re: Funktion aus standard DLL aufrufen

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Thomas Scheidegger [MVP] (spam.netmaster_at_swissonline.ch)
Date: 03/05/04


Date: Fri, 5 Mar 2004 11:57:44 +0100

Hallo Jörg

> short __declspec(dllexport) __stdcall WINAPI pmc_rdpmcrng (

aha, da ist jemand am Fanuc/SPS programmieren ;-)
   (machte ich einige Jahre zuvor in C++ auch mal)

> Ich hab das ganze bisher nur in VB6 benutzt, da liefs ohne Probleme!

irrelevant, .NET PInvoke hat eigene Regeln.
    (IMHO: VB6-Code hier einfach vergessen)

In der Struktur muss man vermutlich wirklich ein Byte-Array mitgeben,
   (C++ unions sind schlecht nach .NET übertragbar)
oder mehrere Varianten von IODBPMC definieren.
   (je nach Datentyp der SPS-Variablen, und je nach Anzahl).

Versuche mal mit richtigen Marshaling-Attributen:

    <StructLayout(LayoutKind.Sequential, Pack:=1)> _
    Private Structure IODBPMC
        Public nType_a As Short
        Public nType_d As Short
        Public nDatano_s As Short
        Public nDatano_e As Short
        <MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> _
        Public sCdata() As Byte
    End Structure

und ändere Code:

'Len' ist ungeeignet für PInvoke, nimm 'Marshal.SizeOf' :

       ............
        tBuf.sCdata = New Byte(32) {}
        Dim siz As Int32 = Marshal.SizeOf(tBuf)
        lret = pmc_rdpmcrng(1234, 5, 0, 2010, 2010, siz, tBuf)

wobei ich doch annehme, dass '1234' nicht als gültiges Handle
durchgeht, muss sicherlich zuerst gelöst (open?) werden...
Falsches Handle kann Exception/Absturz bewirken!

-- 
 Thomas Scheidegger - MVP .NET - 'NETMaster'
 http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/


Relevant Pages

  • Re: Bilder von Webcam auslese
    ... > Für .NET ist TWAIN auch nur mit umfangreichem PInvoke möglich, ... für alles rund um Video-Bilder gibt es die ... > was relativ einfach zu programmieren war (.NET PInvoke), ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: Zeiger auf C++-Struktur
    ... Vorab, wichtig: ... Denn mit PInvoke kann man genauso einfach Crash & Leaks & Memory-Corruption usw. ... In .NET sind Definition viel strikter, ... es geht nur um _einen_ String von fix 80 Zeichen: ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Re: Problem WideCharToMultiByte oder wie "String von Long"
    ... NetDfsGetClientInfo, NetDfsGetInfo, NetDfsEnum ... Fehler in PInvoke sind fatal, bewirken sonst-irgendwo/irgendwann Crashs, Leaks & Corruption, trotz managed .NET! ... Next by Date: ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • Herausfinden ob Workstation oder Server,...
    ... gibt es in .NET eine Funktion mit der ich herausfinden kann, ... einen Server handelt, ohne PInvoke? ... Der Aufruf kapselt halt den ganzen Registry Fummel. ... Kann man das irgendwo im .NET in irgend einer Klasse ohne PInvoke abrufen? ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)