Wpf下使用lib的注意事项

之前做过一个小demo,里面需要在Wpf下调用SDK(lib)的任务,有些地方仍是不太懂,甚至是错误的,简单总结下,慢慢消化。
1.c#是不能直接调用lib文件的,所以要把lib文件封装成dll文件。
2.封装是要看一看原有的lib函数接口是否支持Unicode,简单来说,如果字符串参数用Char*表示不支持,如果用Tchar表示支持(具体还要看 _UNICODE是否定义 )。
3. 如果不支持Unicode,需要在封装时,将参数进行转化。c#string对应c++wchar,而wchar到char是需要转化的。(Unicode到anscii)。C#dllinport声明中,函数参数应为([MarshalAs(UnmanagedType.LPWStr)]string)
4.c#中的delegate对应c++的回调函数。在调用时,需要看一下lib的编译方式, 如果啥都没写,表示默认使用_cdecl调用。而c#中是默认_pascal调用,所以在delegate声明时,特别声明下
[UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
5. wpf中的控件是没有句柄中,  PresentationSource.FromVisual(YourImageControl) as HwndSource;   最终获得的都是窗体句柄。
6.wpf中可以利用WindowsFormsHost来使用Winform控件(winform控件是都有句柄的),但要注意窗体AllowsTranspancy不能设置成true,否则winform无法正常显示(暂时未解决)
7.在vs中对lib封装成dll时,代码生成的运行库要选用MTd方式,否则最后生成的程序在别的电脑上可能因为依赖,无法运行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值