У меня есть C ++ DLL, которую я пытаюсь связать с использованием C #.У меня нет доступа к исходному коду DLL, поэтому его нельзя изменить.Один из методов, которые мне нужно вызвать, содержит указатель на unsigned long:
int __stdcall Foo(FooHandle messageHandle, unsigned long* tag, char* part, char* value)
Я создал тестовый проект DLL с той же сигнатурой метода, так что я могу попытаться выяснить это, но не смогбыл в состоянии заставить DLL изменить значение unsigned long, на которое ссылается указатель, и вернуть это значение на стороне C #.Объявление на стороне C #:
[DllImport("Foo.dll", EntryPoint = "Foo", CallingConvention = CallingConvention.StdCall)]
public static extern int Foo(int messageHandle, IntPtr tag, StringBuilder part, StringBuilder value);
Когда я делаю вызов из C #, а затем пытаюсь преобразовать IntPtr в Int32 или Int64, я получаю ноль.Я искал здесь и в сети в целом, а также MSDN и не могу найти объяснение того, как это сделать.Я подумал, что char * будет сложной частью, но StringBuilder просто работает.
Как вы можете использовать C ++ DLL, которая изменяет значение unsigned long, которое передается указателем?помощь будет оценена.Спасибо.