Форум
.NET
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Serginio1, Вы писали: S>Здравствуйте, newalex77, Вы писали: N>>Здравствуйте, Serginio1, Вы писали: S>>>https://stackoverflow.com/questions/17561699/how-to-get-an-intptr-to-a-struct N>>В этой статье показано как использовать функцию из dll, в которую передается структура. N>>Мне надо получить доступ к статической структуре из dll (в которой есть указатели на функции). S>Не совсем там показано копирование из объекта в нативную память и наоборот S>[cs] S>private IntPtr MarshalToPointer( S> object data) S>{ S> IntPtr buf = Marshal.AllocHGlobal( S> Marshal.SizeOf(data)); S> Marshal.StructureToPtr(data, S> buf, false); S> return buf; S>} S>[/cs] S>[q] S>This simply returns an IntPtr to an area of the global heap that contains a copy of the data. The only problem with this function is that you have to remember to release the allocated heap memory after use. For example: S>[/q] S>[cs] S>IntPtr lpstruct = S> MarshalToPointer(Sinfo); S>result = AVIFileCreateStream(pFile, S> ref pStream, lpstruct); S>Marshal.FreeHGlobal(lpstruct); S>[/cs] S>[q] S>…works exactly like default marshalling. But don’t forget that lpstruct is itself still being marshalled as a pass-by-value integer. To copy the result back to the struct an additional function is required: S>[/q] S>[cs] S>private object MarshalToStruct( S> IntPtr buf,Type t) S>{ S> return Marshal.PtrToStructure( S> buf, t); S>[/cs] S> Доступ к структуре ты можешь получить через экспортируемые функции
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …