`
shappy1978
  • 浏览: 698568 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Windows Phone项目中调用C语言写的DLL

    博客分类:
  • Win8
 
阅读更多

http://www.cnblogs.com/Kennytian/p/3837405.html

 

最近接到一个需求,需要在WP里调用一个C语言写的DLL,并且说Android和iOS都可以,问我WP是否可以这样? 我说我调研一下,就有了下面的文章。

在传统C# WinForm 里调用Win32 DLL都不容易(可能用惯了C#),要用P/Invoke,然后DllImport什么什么,那WP里不是更麻烦?

先看看网上有没有可用的文章,结果还真找到devdiv中的文章,但其中有两处错误,所以我fix bug并且整理一下,然后展示给大家。

 

1.1、建立"模拟"C语言生成DLL的工程

1.2、创建好project后, 就看到两个与之相同名称的文件

1.3、在.h文件里写入

#pragma once

extern "C" int _declspec(dllexport)Multiplication(int i, int j);

1.4、在.cpp文件里写入

复制代码
#include "pch.h"
#include "CalculatorDynamicLinkLibrary.h"

int Multiplication(int i, int j)
{
    int calc = i * j;

    return calc;
}
复制代码

1.5、编译这个project,在solution文件夹找到Debug,然后就能看到我们模拟生成的DLL

2.1、创建 C++ Windows Runtime Component 项目

2.2、创建好project后, 就看到两个与之相同名称的文件

2.3、在.h文件里写入

复制代码
#pragma once
#include <collection.h>
#include <../CalculatorDynamicLinkLibrary/CalculatorDynamicLinkLibrary.h>

namespace CalculatorInvoke
{
    public ref class CalculatorInvoker sealed
    {
    public:
        CalculatorInvoker();

        int Mult(int i, int j);
    };
}
复制代码

2.4、在.cpp文件里写入

复制代码
#include "pch.h"
#include "CalculatorInvoke.h"

using namespace CalculatorInvoke;
using namespace Platform;

CalculatorInvoker::CalculatorInvoker()
{
}
int CalculatorInvoker::Mult(int i, int j)
{
    return Multiplication(i, j);
}
复制代码

如果这时你着急编译,肯定会出错,不信就试试,呵呵!

2.5、在component project上,右键属性,找到设置Linker,在Additional Dependencies里填写第一个project的lib文件

devdiv网站是教的是设置.dll文件,我试了会报错

2.6、设置General,这里一定不能错,不然就会报找不到.lib文件。devdiv教的是指向绝对路径,如果把项目移到别的目录下还会报找不到.lib路径。

点Additional Library Directories 的下拉,再点Edit,就弹出如下窗口

Tips:关于类似”$(SolutionDir)“的用法,已经在链接3中给出了,列举比较详情,感谢作者!

3.1、创建 Windows Phone 项目,这里是大家最熟悉的部分了

 

 3.2、添加引用Windows Phone Component项目,或者后期引用Windows Phone Component生成出来的DLL也行。

3.3、添加Win32 DLL文件到Windows Phone项目中,并在属性里设置为conent, copy always。

3.4、添加WP里C#的代码

复制代码
private void CalculateRsult(object sender, System.Windows.Input.GestureEventArgs e)
{
    if (string.IsNullOrWhiteSpace(input1.Text) || string.IsNullOrWhiteSpace(input2.Text))
    {
        MessageBox.Show("输入框不能为空!", "友情提示", MessageBoxButton.OK);
        return;
    }

    CalculatorInvoker calculator = new CalculatorInvoker();

    int i = Convert.ToInt32(this.input1.Text);
    int j = Convert.ToInt32(this.input2.Text);
    int result = calculator.Mult(i, j);

    this.txtResult.Text = string.Format("{0}", result);
}
复制代码

编译步骤:先CalculatorDynamicLinkLibrary,再CalculatorInvoker,最后CalculatorApp

3.5、计算结果

 

源代码下载

 

参考文档:

http://www.devdiv.com/forum.php?mod=viewthread&tid=135252

http://www.jarredcapellman.com/2012/11/03/how-to-get-c-winrt-in-a-windows-phone-8-application/

http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html

分享到:
评论

相关推荐

    [实例]Windows phone8 调用WCF服务

    在Windows phone8环境下,开发者必须实现异步方法,这是因为Windows phone8平台对同步调用的支持有限,且异步调用对于提供流畅的用户体验是非常重要的。 首先,我们来介绍WCF服务的创建和异步方法的实现。WCF...

    仿Windows Phone博客导航源码

    控件中的tiles链接到web站点在你的博客中使用这个控件可以表达你对WP7的喜爱。 Windows Phone Blog Menu is a Silverlight navigation control that looks like a Windows Phone 7. The live tiles in the control ...

    iphone连接助手源码 C++调用itunes的MobileDevice.dll与电脑建立连接支持新版itunes IOS

    ituzi手机助手demo源码只是简单的电脑与手机初步建立连接,获取iphone基本信息,其他功能开发中 使用前请检查itunes是否已安装64位版本,我使用的...实在不行,可以自己改为直链接dll所在文件夹直接调用dll 2022.4.10

    windows phone power tools offline installer

    总的来说,Windows Phone Power Tools离线安装器是Windows Phone 8开发者不可或缺的工具,它简化了工具的安装过程,提高了开发效率,尤其是在不稳定的网络环境中,其离线安装的优势更为明显。对于需要维护和优化...

    Windows Phone USB_v4.8.2345_驱动

    1. **数据同步**:Windows Phone USB驱动使用户能够方便地在手机和电脑之间同步联系人、日历事件、音乐、照片和其他媒体文件,确保跨平台的数据一致性。 2. **文件传输**:用户可以通过USB线快速传输文件,如应用...

    c# 调用C++编写 的DLL函数各种参数传递问题。

    在 C# 调用 C++ 编写的 DLL 函数时,参数传递是一个非常重要的部分。这篇文章将详细介绍 C# 调用 C++ 编写的 DLL 函数各种参数传递问题,包括不返回值的参数、带返回值的参数、传递结构体指针和传递结构体数组等。 ...

    Windows Phone 简单的记事本

    这个项目,名为“WP_HomeWordk_Day3”,很可能是某个教学系列的一部分,旨在帮助学习者理解如何在Windows Phone环境中构建实用的应用程序。 首先,我们要了解Windows Phone操作系统,它是由微软公司开发的,主要...

    浅谈在Windows Phone 7 中ListBox的使用

    在Windows Phone 7开发中,ListBox是一个非常重要的控件,用于展示一系列可滚动的项目列表。这个控件继承自ItemsControl,允许开发者通过Items或ItemsSource属性来填充内容。本文将深入探讨ListBox的使用,包括数据...

    Windows Phone 7国人开源项目 - WeatherCN

    Windows Phone 7国人开源项目 - WeatherCN

    windows phone 7 铃声

    3. **设置铃声**:在Windows Phone 7中,用户可以进入“设置”&gt; “声音”菜单,然后选择“铃声+音效”,在这里可以更改默认的电话、短信或闹钟铃声。对于特定联系人的个性化铃声,可以在联系人详情页中进行设置。 4...

    windows phone PC客户端连接zune

    在Windows Phone的早期版本中,Zune扮演了非常重要的角色,它不仅是用户的媒体库,还是连接Windows Phone手机与PC的主要桥梁。 Zune PC客户端是一个功能强大的应用程序,允许用户管理和同步他们的音乐、视频、图片...

    Silverlight for Windows Phone 7

    Silverlight for Windows Phone 7是这个系统中开发应用程序的关键技术。 **三、Silverlight for Windows Phone 7特性** 1. **XAML界面设计**:Silverlight for Windows Phone 7使用XAML语言定义用户界面,通过XML...

    Windows phone app develop guide

    在当今的移动应用开发领域,Windows Phone开发指南是针对想要学习如何为Windows Phone平台开发应用程序的开发者或学生提供的官方指南。该指南详细介绍了使用Microsoft的工具和技术构建、测试和发布Windows Phone应用...

    windows phone 7 输入法

    在Windows Phone 7操作系统中,输入法是用户与设备交互的重要组成部分,特别是在处理文本输入时。Windows Phone 7 自定义输入法的特性允许开发者和用户根据个人需求调整和优化默认的输入体验。以下是对这个主题的...

    Windows Phone安装包

    Windows Phone 安装包(CAB)是一种专门用于 Windows Phone 平台的安装包格式,允许开发者将应用程序、DLL 文件、注册表信息等打包到一个文件中,以便在 Windows Phone 设备上安装和共享。下面将详细介绍如何制作 ...

    windows phone草图原型设计组件

    在移动操作系统领域,Windows Phone(WP)曾是一个重要的竞争者,尤其在设计师和开发者中,创建吸引用户且功能丰富的应用程序是关键。Balsamiq Mockups是一款流行的设计工具,它帮助设计者快速创建线框图和原型,以...

    Windows Phone 7开发环境安装教程汇总

    在Visual Studio中,你需要创建一个新的Windows Phone项目。安装SDK后,你应该能看到对应的项目模板。配置好项目设置,如目标平台版本(通常是Windows Phone 7.1或更高)。 7. **调试与测试** 使用Visual Studio...

    Windows Phone 开发中使用SQL CE数据库实例

    1. **添加引用**:在Visual Studio中,打开你的Windows Phone项目,右键点击"References",选择"Add Reference",然后在"Assembly"选项卡中查找并添加"System.Data.SqlServerCe"组件。 2. **创建数据库**:在代码中...

    Windows Phone 下载网络图片Demo

    【Windows Phone 下载网络图片Demo】是一个针对Windows Phone平台的应用示例,主要展示了如何在该平台上实现从网络下载并显示图片的功能。这个Demo是开发者在CSDN博客上分享的一个技术教程,链接为,通过此教程,...

Global site tag (gtag.js) - Google Analytics