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
}
}
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
}
}