首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

c# 调用xxx.dll非托管代码,该如何解决

2012-02-14 
c# 调用xxx.dll非托管代码[DllImport(libvlc)]private unsafe static extern void libvlc_media_player_

c# 调用xxx.dll非托管代码
[DllImport("libvlc")]
  private unsafe static extern void libvlc_media_player_set_hwnd(CoreHandle coreHandle, void* drawable);
错误2不安全代码只会在使用 /unsafe 编译的情况下出现
 //设置父窗口 
  unsafe public void VedioSetParent(CoreHandle coreHandle, IntPtr hear)
  {
  libvlc_media_player_set_hwnd(coreHandle, (hear.ToPointer()));
  }
错误1不安全代码只会在使用 /unsafe 编译的情况下出现

错误在于void* drawable 进行了强转 在xxx.dll里 接口为
/**
 * Set a Win32/Win64 API window handle (HWND) where the media player should
 * render its video output. If LibVLC was built without Win32/Win64 API output
 * support, then this has no effects.
 *
 * \param p_mi the Media Player
 * \param drawable windows handle of the drawable
 */
LIBVLC_API void libvlc_media_player_set_hwnd ( libvlc_media_player_t *p_mi, void *drawable );
怎么实现C#代码的修改啊...

[解决办法]
libvlc_media_player_t是一个结构体吧,你把它先贴出来。。。
[解决办法]
为什么用unsafe呢??
[DllImport("libvlc")]
public static extern void libvlc_media_player_set_hwnd(CoreHandle coreHandle, IntPtr drawable);

[解决办法]
正确做法:

C# code
[DllImport("libvlc")]public static extern void libvlc_media_player_set_hwnd(ref libvlc_media_player_t p_mi, IntPtr drawable);
[解决办法]
可以在定义前用unsafe标识:
unsafe class xx
{
[DllImport("libvlc")]
public static extern void libvlc_media_player_set_hwnd
...
}
编译设置中勾上 允许使用不安全代码.
[解决办法]
CoreHandle,libvlc_media_player_t这两个都是自定义类型吧?
[解决办法]
为什么非要非托管呢,
用托管代码,然后手动回收垃圾就行啊.

热点排行