Generalno bi trebao da se pridrzavas nekih pravila, tj. ne mozes da mu preneses float tamo gde on, recimo, ocekuje int. Pogledaj ovu
tabelu koja je deo
clanka koji se bavi nekim osnovama koriscenja Win32 dll-ova u Frameworku (P/Invoke). Za UINT koristi System.UInt32 (ili skraceno samo uint) a za string, evo primera:
Code:
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace TestingPInvoke
{
public class App
{
public static void Main()
{
StringBuilder str = new StringBuilder(256);
Console.WriteLine(GetSystemDirectory(str, str.Capacity));
Console.WriteLine(str.ToString());
}
[DllImport("Kernel32.dll")]
// UINT GetSystemDirectory(LPTSTR lpBuffer, UINT uSize);
public static extern bool GetSystemDirectory(StringBuilder lpBuffer, int uSize);
}
}
ili ovako nesto:
Code:
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace TestingPInvoke
{
public class App
{
public static void Main()
{
int size = 256;
StringBuilder str = new StringBuilder(size);
GetUserName(str, ref size);
Console.WriteLine("User: {0}\tSize: {1}", str.ToString(), size);
Console.ReadLine();
}
[DllImport("Advapi32.dll")]
// BOOL GetUserName(LPTSTR lpBuffer, LPDWORD nSize)
public static extern bool GetUserName(StringBuilder lpBuffer, ref int nSize);
}
}
p.s. Nisam vodio racuna o ansi i unicode karakterima
Sto se tice drugog dela pitanja, gde ti se nalazi dll? Da li je u direktorijumu gde je i aplikacija?