注:需要有C/C++和C#基础,文章持续更新中…
引子:(看技术的请跳过)
会写这个博客原因在于耍android时总是碰到一堆流氓手机助手,至于怎么流氓我就不多说了,后来动了自己写一个手机助手的念头,不就是写代码嘛都和代码谈了五六年恋爱的单身汪了怕啥。最开始当然 从adb入手,最简单的就是将操作合成命令使用重定向I/O执行adb.exe解析adb.exe的输出,这种方式我在当我打开ide后我就放弃了,太low了。后来就想adb.exe肯定也是用一套api来做的,就尝试找了下,发现有adb的工程代码,于是乎跟着做了一个也编译成功了,不过编译出来也就是adb.exe这个东西,这个网上下载就有了何必编译呢,虽然有源码,可以修改一些,然后重新编译,然而是基于控制台的,用起来肯定不怎么样。重点来了,有源码我们何不拉出一些adb的api出来给winfrom使用?说干就干,开发环境VS2010,界面我选择C#(毕竟我认为MFC已经是被淘汰的东西了,VB.NET是学校玩的)!这里我是边上班边写这个工具边写博客,如果哪里写的不好你们TM来打我啊,哈哈!
创建lib工程:
新建win32项目
应用程序类型选择DLL
比较洁癖,我一般会删除预编译,这里可以不删除,不过后面加入adb还是要删除
添加adb_interface.cpp文件:
#include <stdio.h>
int helloWorld()
{
printf("hello world\n");
return 9527;
}
添加模块定义文件
点一下调试那个绿色三角形,这里会弹出一个无法运行的错误,不管它这里仅仅是为了生产一下dll文件。
创建winfrom项目
在from中拉一个label和一个button,双击button,编写如下代码
[DllImport(“E:\workspace\Visual Studio\ProMonkey\Debug\AdbDll.dll”)]
表示导入dll动态链接库,AdbDll.dll就是我们上面的win32项目生成的dll,这里直接使用绝对路径是为了方便演示,需要换成你自己的路径。
效果:
注:因为是winfrom,所以c++里的printf(“hello world\n”);是看不到的,如果想获取printf()的输出需要I/O重定向。
如果你是冲着标题来的,到这里已经结束了,C#何如使用C++编译的DLL不会继续深入,显然这不是一篇好的介绍如何使用DLL是文章当然我的目的也不在于此,后面将开始我的手机助手编写过程,具体会写成什么样的我现在也未可知,因为你现在看到的就是我目前的全部工程。
后续代码我会全部放到这个百度云盘的目录下,有需要的自己来下载
工程文件
可能出现的问题:
warning LNK4070的解决办法