使用 C++ .NET 语言标头
我尝试以 .NET 语言(可能是 C#)使用 Windows SDK 中的“.h
”文件,但没有成功。 此标头通过 COM 公开一些 Windows Media 播放器功能。 如果我使用Win32 C++,我可以毫无问题地使用它,所以我认为我可以使用托管C++作为“桥梁”将其暴露给C#。
头文件是 Windows Media Player SDK 11(Windows SDK 6 的一部分)附带的 subscriptionservices.h
。
那可能吗? 如何在 .NET 应用程序中使用该头文件?
谢谢, 爱德华多·科布奇
I trying to use a ".h
" file from Windows SDK in a .NET language (maybe C#), but without success. This header exposes some Windows Media player functionality through COM. If I use Win32 C++, I can use it with no problems, so I thought that I could use Managed C++ as a "Bridge" to expose it to C#.
The header file is the subscriptionservices.h
that comes with Windows Media Player SDK 11 (part of Windows SDK 6).
Is that possible? How could I use that header file in a .NET Application?
Thanks,
Eduardo Cobuci
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以使用 PInvoke 与 Win32 进行互操作。 如果您尝试使用 COM 对象,您应该能够添加对项目的引用。 您看过这篇文章吗?
更实际的是,您需要了解这种你正在做的工作。 如果您要进行大量指针算术,那么我建议使用托管 C++。 如果不是 C#。 祝你好运。
You can use PInvoke to Interop with Win32. If you are trying to use a COM object you should be able to add a reference to the project. Have you looked at this article?
More practically you need to understand the kind of work that you are doing. If you are going to be doing lots of pointer arithmetic then I would recommend managed c++. If not C#. Good luck.
如果您希望从头文件中使用特定的代码片段或类型,则可以将它们粘贴到 PInvoke Interop Assistant 中并获取为您生成的 C# 代码。
http://www.codeplex.com/clrinterop/Release/ProjectReleases。 aspx?ReleaseId=14120
If there is a particular snippet of code or types that you are looking to use from the header file, you can paste them into the PInvoke Interop Assistant and get the C# code generated for you.
http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=14120
尝试 PInvoke。 我认为您不能使用实际的标头,但您可以引用外部非托管 DLL 中的函数。
Try PInvoke. I don't think you can use the actual header, but you can reference functions in external unmanaged DLLs.
对的,这是可能的。 P/Invoke 是你的朋友。 使用此链接翻译标题。
平台调用数据类型
Yes - it is possible. P/Invoke is your friend. Use this link to translate the headers.
Platform Invoke Data Types
如果您选择 C++ 这条路,这可能会让您在 C++ 道路上领先一步。
http://code.msdn.microsoft.com/wmpinterop
请注意,WMP 界面有一些P/Invoke 的棘手接口。 对我来说,编写一个 C++ 包装器更容易。
This might give you a head start on the C++ path, if you go that way.
http://code.msdn.microsoft.com/wmpinterop
Note that the WMP interface has some tricky interfaces to P/Invoke into. For me, it's easier just to write a C++ wrapper.
如果 API 很简单,你可以使用 PInvoke,如果很复杂,我建议使用 C++/CLI。 这使您可以在托管世界和非托管世界之间创建一座“桥梁”。
If the API is simply you can use PInvoke, if it's complicated I would suggest using C++/CLI. This allows you to create a 'bridge' between the managed and the unmanaged world.