C#调用ATL,MFC,标准DLL的问题

cc_net 2011-10-27 01:07:14
最近在弄WP7调用非托管代码的问题。

我在VS2008中建立了ATL Smart Device Project,然后编译出的DLL在WM和WP7上都是可以用的。

然后我建立了一个Win32 Smart Device Project,选了一个空项目,自己加入.h和.cpp,

extern "C" __declspec(dllexport) int AddMethod(int nNum1,int nNum2);

通过DllImport在WM上可以使用,WP7上不能使用,因为WP7必须要COM组件。

第一个问题就是,在创建Win32 Smart Device Project时,如果不选择空项目,会包含一个DllMain的DLL入口方法,请问这个入口方法具体干嘛?因为前面建的空项目没有这个方法也能被WM调用。

第二个问题是,在创建Win32 Smart Device Project时,还有ATL的选择,说是build in ATL库,请问这个有什么用?ATL项目与偶什么区别

第三个问题是,如果比如我创建了一个MFC Smart Device Project后,里面定义了一个类,我在这个类中写入了一个Add方法,如何让WM上能调用到这个类的方法? 是否还是使用DllImport,那应该怎么写呢?因为方法是包含在类中。

平时工作并不涉及到C++写COM和MFC,只是在弄WP7调用DLL时对这有写疑问,想了解一下。
...全文
447 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
redapplewoo1 2013-03-12
  • 打赏
  • 举报
回复
我的的问题也差不多!wp8开发中,要调用一些用C写好的图像处理滤镜??请怎么在Wp8sdk种调用这些函数?C文件都在手上!就是不知道怎么在wp里使用??
junxianalan 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
最近在弄WP7调用非托管代码的问题。

我在VS2008中建立了ATL Smart Device Project,然后编译出的DLL在WM和WP7上都是可以用的。

然后我建立了一个Win32 Smart Device Project,选了一个空项目,自己加入.h和.cpp,
C/C++ code

extern "C" __declspec(dllexport) int AddMet……
[/Quote]

楼主你好,我现在也遇到这样的问题了,我用VS2010 ATL编译的dll加载到wp7项目里面加载不进,求教下楼主
烂番 2011-10-28
  • 打赏
  • 举报
回复
不好意思,误导了,那个虚函数的说法,因为c/c++程序使用dll类中的非虚函数后,在编译的时候必须要有dll导出的lib文件,不然编译通不过。
===============

类的成员函数在汇编这个层面来看,其实也只是个普通的函数,跟类是没有关系的,不过在dll导出表里附加了一串符号而已,你要用Dependency等工具查看它具体的导出名之后,跟普通导出函数一样的使用就行:
http://www.jumbotcms.net/html/xinde/201006/16/159.shtml
beyondma 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cc_net 的回复:]
引用 3 楼 luver 的回复:
3,这个比较麻烦,成员函数必须得是虚函数:

C/C++ code


class _declspec(dlle……


恩,很感谢。那要如何调用呢?我看.NET互操作的书上也只有介绍和WIN32 DLL,或者COM交互。
[/Quote]
DLLIMPORT可以吧,只要是EXPORT得函数。
cc_net 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luver 的回复:]
3,这个比较麻烦,成员函数必须得是虚函数:

C/C++ code


class _declspec(dlle……
[/Quote]

恩,很感谢。那要如何调用呢?我看.NET互操作的书上也只有介绍和WIN32 DLL,或者COM交互。
烂番 2011-10-27
  • 打赏
  • 举报
回复
1, DllMain()是一个dll的入口,在dll被载入时自动调用,你不写的话,编译时会自动给你加个空的;
2,这个勾上后,表示你的Win32程序可以使用atl库,你可以认为atl库是一个跟mfc类似的一个库;
新建ATL工程时,它构建的是符合COM规范的dll工程。
3,这个比较麻烦,成员函数必须得是虚函数:

class _declspec(dllexport) MyClass
{
public: virtual void test();
};
cc_net 2011-10-27
  • 打赏
  • 举报
回复
其实我工作不会用到COM,但COM的话我也看了一些书,基本概念还是有;用ATL或Phone Builder写个COM组件的列子也还OK。

C#和COM Interop交互也没问题,和WIN32那种DLL用P/Invoke也没问题。COM我可以通过IDL中定义,用tblipm来生成COM对象的申明,而P/Invoke直接用DLLImport。


问题就是如果我建一个MFC Smart Device的DLL,它是如何来暴露接口让我C#调用。
DrSmart 2011-10-27
  • 打赏
  • 举报
回复
嗨,你学习下COM就行了,你问这问题,估计也搞不好其他的,

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧