Announcement

Collapse
No announcement yet.

Fehler beim Ausführen einer Funktion aus einer nicht verwalteten dll mit C#

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler beim Ausführen einer Funktion aus einer nicht verwalteten dll mit C#

    Hallo

    Ich habe eine vor Jahren mit c++ geschriebene dll (trdp.dll) incl. lib. Diese kann ich mit Visual Studio 2005 in einem C++ Projekt implizit laden.
    Diese dll möchte ich jetzt aber in einem C# Projekt verwenden.
    Das gelingt mir nicht. In Foren usw. habe ich einige Zeit gestöbert, sowie in der msdn.
    Die beiden folgenden Ansätze hab ich probiert (siehe unten).
    Der Fehler ist beides mal der Selbe.
    Die dll Funktion "TrdpCreateLink" wird aufgerufen, nicht ausgeführt und der Last Error 1008 zur Abholung bereitgestellt.
    Error_No_token könnte das heißen, aber keine Ahnung was das konkret bedeutet.

    Die Funktion ist in der c++ dll wie folt deklariert:
    extern "C" _declspec(dllexport) unsigned long far TrdpCreateLink (char
    *pszRemoteIPAddress, unsigned short wRemotePortNum, unsigned short
    wLocalPortNum, unsigned long dwTimeout, unsigned short* pLinkID);

    Für Tipps wär ich sehr dankbar.

    Grüße
    Pious


    //Erster Ansatz:
    ...
    using System.Runtime.InteropServices;

    namespace DllAufruf
    {
    public partial class Form1 : Form
    {

    [DllImport("trdp.dll", SetLastError = true)]
    public static extern ulong TrdpCreateLink(StringBuilder pszRemoteIPAddress,
    ushort wRemotePortNum, ushort wLocalPortNum, ulong dwTimeout, ref
    ushort pLinkID);


    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

    StringBuilder lpszServerName = new StringBuilder("127.0.0.1");

    ushort LinkId = 0;
    ulong res = TrdpCreateLink(lpszServerName, 5001, 5002, 4294967295, ref
    LinkId);
    int LastErr = Marshal.GetLastWin32Error();
    // LastErr = 1008

    }
    }
    }


    Zweiter Ansatz:
    ...
    using System.Threading;


    namespace DllAufrufZweiterVersuch
    {

    public partial class Form1 : Form
    {
    [DllImport("trdp.dll", SetLastError = true)]
    public static unsafe extern ulong TrdpCreateLink(char* pszRemoteIPAddress,
    ushort wRemotePortNum, ushort wLocalPortNum, ulong dwTimeout,
    ushort* pLinkID);


    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    unsafe
    {
    String str = "127.0.0.1";
    char[] ServerName = new char[20];

    str.CopyTo(0, ServerName, 0, 9);

    ushort b = 0;
    ushort* LinkId = &b;

    fixed (char* lpszServerName = ServerName)
    {
    ulong res = TrdpCreateLink(lpszServerName, 5001, 5002, 4294967295,
    LinkId);
    }
    }
    int LastErr = Marshal.GetLastWin32Error();
    // LastErr = 1008
    }
    }
Working...
X