6569|7

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince下c#调用c++标准dll [复制链接]

Vc++的代码:
// vccedll.cpp : 定义 DLL 应用程序的入口点。
//

#include "stdafx.h"
#include
#include

extern "C" int add(int x,int y);
extern "C" char * sayhello();
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                                         )
{
    return TRUE;
}

int add(int x,int y)
{
return x + y;
}

char * sayhello()
{
        return "hello chj!";
}

C#的代码

        [DllImport("vccedll.dll")]
        public static extern byte[] sayhello();

        [DllImport("vccedll.dll")]
        public static extern int add(int x, int y);

调用时报 如果类库中的某个方法已被移除或重命名,请重新编译引用该方法的所有程序集。

怎么回事呀,急死了!!

最新回复

你丫的太有才了. ref byte[0].... C语言里面字符串,都是以'\0'结尾的,对应C#里面的String,话说String的威力可不是很一般的,他可以处理很多编码的,所以最好不要自己裸体的调用byte数组之类的....  详情 回复 发表于 2010-1-8 08:53
点赞 关注

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
那你把整个工程重新编译下啊
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
是的,重新编译和发布好几次了,调试状态下报如果类库中的某个方法已被移除或重命名,请重新编译引用该方法的所有程序集。
如果直接在CE上执行报,找不到ADD入口点。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
编译成windows标准库,调用格式:
[DllImport("vccedll.dll")]
static extern unsafe int add(int x, int y);
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
导出函数前面少这个__declspec(dllexport)

另外,char*对应C#里面的string,而不是byte[]
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

6
 
还有C#跟Native代码交互,除了跟C API(C导出函数)交互外,其次就是跟COM交互.
跟C++的导出函数是不能交互的.
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
我的解决方法
导出函数前面增加这个__declspec(dllexport)
C#中
声明 [DllImport("\\Program Files\\pdaappgis\\vccedll.dll", EntryPoint = "sayhello")]
        public static extern void sayhello(ref byte acp);
调用
int tmpi;
            int Len = 20;
            byte[] buf = new byte[Len];
            string tmpstr;
            
            tmpi = GisDllClass.add(3, 5);

            GisDllClass.sayhello(ref buf[0]);
            tmpstr = Encoding.GetEncoding("GB2312").GetString(buf, 0, Len);
            tmpstr = tmpi.ToString()+" and  "+ tmpstr.ToString();
            MessageBox.Show(tmpstr);
哈哈搞定了,不过谢谢egmkang,他的答案最管用。虽然是我自己解决的不过分还给你了。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 
你丫的太有才了.
ref byte[0]....
C语言里面字符串,都是以'\0'结尾的,对应C#里面的String,话说String的威力可不是很一般的,他可以处理很多编码的,所以最好不要自己裸体的调用byte数组之类的....
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表