Dlaczego poniższy kod nie działa?Dlaczego to wywołanie AddDllDirectory kończy się niepowodzeniem z "Parametr jest niepoprawny"?
open System
open System.Runtime.InteropServices
open System.ComponentModel
[<DllImport("kernel32")>]
extern int AddDllDirectory(string NewDirectory)
[<EntryPoint>]
let main argv =
let result = AddDllDirectory("c:\\")
if result = 0 then
printfn "%A" <| Win32Exception(Marshal.GetLastWin32Error())
// Prints: "System.ComponentModel.Win32Exception (0x80004005): The parameter is incorrect"
System.Console.ReadLine() |> ignore
0 // return an integer exit code
Ah, to dlatego muszę określić niezarządzanego typu ciąg, jeśli nie ustawić CharSet? Nawet niejasno zaczyna mieć sens. Powiedziawszy to, myślałem, że Unicode był domyślny? – mavnn
Nie, ANSI jest ustawieniem domyślnym (http://msdn.microsoft.com/en-us/library/7b93s42f.aspx), co jest dość dziwne, ponieważ używasz go tylko tam, gdzie absolutnie musisz (np. GetProcAddress). –