Các chức năng như CreateProcess có chữ ký lấy con trỏ tới cấu trúc. Trong C tôi chỉ cần vượt qua NULL
như một con trỏ cho các tham số tùy chọn, thay vì tạo một đối tượng struct dummy trên stack và đi qua một con trỏ đến giả.P/gọi hàm lấy con trỏ đến cấu trúc
Trong C#, tôi đã tuyên bố nó như là (P/Invoke)
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CreateProcess(
string lpApplicationName,
string lpCommandLine,
ref SECURITY_ATTRIBUTES lpProcessAttributes,
ref SECURITY_ATTRIBUTES lpThreadAttributes,
bool bInheritHandles,
CreateProcessFlags dwProcessCreationFlags,
IntPtr lpEnvironment,
string lpCurrentDirectory,
ref STARTUPINFO lpStartupInfo,
ref PROCESS_INFORMATION lpProcessInformation);
Nhưng nếu tôi cố gắng vượt qua null
cho lpProcessAttributes
luận hoặc lpThreadAttributes
lập luận, tôi nhận được một lỗi biên dịch:
Error 2 Argument 3: cannot convert from '<null>' to 'ref Debugging.Wrappers.SECURITY_ATTRIBUTES'
Làm cách nào tôi có thể sửa đổi chữ ký hàm trên để tôi chỉ có thể vượt qua null
đối với SECURITY_ATTRIBUTES đối số, không có lỗi trình biên dịch này? (Và cũng có thể vượt qua một cấu trúc thực nếu tôi muốn?)
Có vẻ như câu hỏi của tôi giống như câu hỏi này, mặc dù tôi sẽ không đoán nó từ tựa đề. http://stackoverflow.com/questions/1049623/how-to-pass-a-nullable-type-to-a-p-invoked-function –