Wpf下使用lib的注意事项

来源:互联网 发布:linux退出命令行界面 编辑:程序博客网 时间:2024/06/05 16:30
之前做过一个小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
原创粉丝点击