首页 \ 问答 \ 如何从[C#WP8.1 WRT / SL]项目中调用[Unmanaged C ++ DLL func](How to Call [Unmanaged C++ DLL func] from [C# WP8.1 WRT/SL] project)

如何从[C#WP8.1 WRT / SL]项目中调用[Unmanaged C ++ DLL func](How to Call [Unmanaged C++ DLL func] from [C# WP8.1 WRT/SL] project)

这不是“如何从C#调用C ++函数”的重复

我知道如何为普通的PC应用程序做到这一点,我尝试过,它的工作原理:

这称为P / Invoke

1.
Create a C++ dll project,
but you can't add the C++ dll project as a reference to the C# project.
Copy the dll from C++, and paste the dll to the C# exe folder

2.
in C#  use [DllImport...] 
in C++ use extern "C" __declspec(dllexport) ...

但是当我在WindowsPhone上这样做时,失败了。

有2种类型的非托管c + +原生dll项目的Windows Phone,我都尝试过

DLL (Windows Phone) <- WRT DLL 8.1
DLL (Windows Phone Silverlight 8.1)

我不知道在哪里放置dll文件。 因为最后的exe是一个包。 我不能将dll放在与包相同的文件夹中。 作为软件包的一部分,该DLL应该位于软件包中。

所以我试图在C#WP8.1 SL项目中添加dll作为resorce文件。

但函数调用失败。

所以我想知道的是,如何放置dll,如何使用WP8.1 SL项目来连接dll?

有没有人尝试过吗?

谢谢你们的答案。

// ------------------------------------------------ ------------

所以正确的方法是对于[C#WP8.1 SL]项目,我需要

create a [C++ Runtime Component DLL] <- as bridge
create a [C++ Native WP SL DLL] <- real dll

Add the [C++ Runtime Component DLL] as a reference to [C# WP8.1 SL]
And the [C++ Native WP SL DLL] as a reference to [C++ Runtime Component DLL]

This is not a duplicate of "how to call C++ function from C#"

I know how to do it for regular PC app and I tried and it works:

This is called P/Invoke

1.
Create a C++ dll project,
but you can't add the C++ dll project as a reference to the C# project.
Copy the dll from C++, and paste the dll to the C# exe folder

2.
in C#  use [DllImport...] 
in C++ use extern "C" __declspec(dllexport) ...

But when I do this on WindowsPhone, failed.

There are 2 type of unmanaged c++ native dll project for windows phone, I tried both

DLL (Windows Phone) <- WRT DLL 8.1
DLL (Windows Phone Silverlight 8.1)

I don't know where to place the dll file. Because the finally exe is a package. I can't place the dll in the same folder with the package. The dll should be in the package, as a part of the package.

So I tried to add the dll as a resorce file in the C# WP8.1 SL project.

But the function call failed.

So what I want to know is, how to place the dll, how to hook up the dll with the WP8.1 SL project?

Is there any one try that before?

Thank you guys for the answer.

//------------------------------------------------------------

So the correct way is For a [C# WP8.1 SL] project, I need to

create a [C++ Runtime Component DLL] <- as bridge
create a [C++ Native WP SL DLL] <- real dll

Add the [C++ Runtime Component DLL] as a reference to [C# WP8.1 SL]
And the [C++ Native WP SL DLL] as a reference to [C++ Runtime Component DLL]

原文:https://stackoverflow.com/questions/29761538
更新时间:2022-07-01 16:07

最满意答案

id1id2实际上是NSString ,即使它们被转换为id并传递给你的函数(这种方法很有用,因为你可以定义你的compare函数来排序自定义对象)。

在字符串上调用stringValue是没有意义的(实际上, NSString没有名为stringValue的成员函数)。

使用字符串只是NSStringNSString

NSString *s1 = (NSString*) id1;
NSString *s2 = (NSString*) id2;

这不是绝对必要的(你甚至可以直接使用id1id2 )但是转换会避免你得到编译器警告(也是一个更清晰的代码)。


id1 and id2 are actually NSStrings, even if they are casted to id and passed to your function (this approach is useful because you can define your compare function in order to sort custom objects).

It doesn't make sense to call stringValue on a string (and, in fact, NSString do not have a member function named stringValue).

To work with strings just cast back to NSStrings.

NSString *s1 = (NSString*) id1;
NSString *s2 = (NSString*) id2;

This is not strictly necessary (you can even work directly with id1 and id2) but casting will avoid you to get compiler warnings (also it's a clearer code).

相关问答

更多

相关文章

更多

最新问答

更多
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)
  • 是否可以嵌套hazelcast IMaps?(Is it possible to nest hazelcast IMaps? And whick side effects can I expect? Is it a good Idea anyway?)
  • UIViewAnimationOptionRepeat在两个动画之间暂停(UIViewAnimationOptionRepeat pausing in between two animations)
  • 在x-kendo-template中使用Razor查询(Using Razor query within x-kendo-template)
  • 在BeautifulSoup中替换文本而不转义(Replace text without escaping in BeautifulSoup)
  • 如何在存根或模拟不存在的方法时配置Rspec以引发错误?(How can I configure Rspec to raise error when stubbing or mocking non-existing methods?)
  • asp用javascript(asp with javascript)
  • “%()s”在sql查询中的含义是什么?(What does “%()s” means in sql query?)
  • 如何为其编辑的内容提供自定义UITableViewCell上下文?(How to give a custom UITableViewCell context of what it is editing?)
  • c ++十进制到二进制,然后使用操作,然后回到十进制(c++ Decimal to binary, then use operation, then back to decimal)
  • 以编程方式创建视频?(Create videos programmatically?)
  • 无法在BeautifulSoup中正确解析数据(Unable to parse data correctly in BeautifulSoup)
  • webform和mvc的区别 知乎
  • 如何使用wadl2java生成REST服务模板,其中POST / PUT方法具有参数?(How do you generate REST service template with wadl2java where POST/PUT methods have parameters?)
  • 我无法理解我的travis构建有什么问题(I am having trouble understanding what is wrong with my travis build)
  • iOS9 Scope Bar出现在Search Bar后面或旁边(iOS9 Scope Bar appears either behind or beside Search Bar)
  • 为什么开机慢上面还显示;Inetrnet,Explorer
  • 有关调用远程WCF服务的超时问题(Timeout Question about Invoking a Remote WCF Service)