DLL中的指针问题

yxder 2009-07-07 01:39:45
JAVaScript不能调用带指针参数的接口方法,有没有什么办法在该别人的DLL 使得里面带多个指针参数的函数返回一个字符串值,而这个字符串刚好是原来的几个指针参数返回的值。

比如说long fun(long a,long b,long* c,long *d,long *e)是别人DLL里面的函数

我定义成 ……fun(long a1,long b1,BSTR *c1) 用c1 返回原来的c,d,e的值

如何实现呢?
...全文
75 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxder 2009-07-08
  • 打赏
  • 举报
回复
可以吗?我试试看怎么改
蒋晟 2009-07-08
  • 打赏
  • 举报
回复
参数全部用variant
yxder 2009-07-08
  • 打赏
  • 举报
回复
那就是只能用BSTR了?
我这里还是实现不了BSTR传多个值啊,不知道是哪里的问题
蒋晟 2009-07-08
  • 打赏
  • 举报
回复
javascript也不能用结构的。
指针也不知道是数组还是单个变量的地址。
findcsdn 2009-07-08
  • 打赏
  • 举报
回复
javascript不能直接访问一般DLL的,如果要访问,可以用COM封装一下。

自己写个COM组件,调用你现在的DLL,把接口引出来。


yxder 2009-07-08
  • 打赏
  • 举报
回复
编译不通过都
yxder 2009-07-07
  • 打赏
  • 举报
回复
我觉得可行,但是没有用过结构体调用,能不能给个实例代码呢?
Saingel 2009-07-07
  • 打赏
  • 举报
回复
带指针的试试用相应结构类型的引用调,
至少vb6是可以这样的
yxder 2009-07-07
  • 打赏
  • 举报
回复
求教啊!
yxder 2009-07-07
  • 打赏
  • 举报
回复
STDMETHODIMP CAttendEx::GetEnrollDataSC(LONG a, LONG b, BSTR* c)
{
// TODO: 在此添加实现代码

CString str;
BSTR *bstr=NULL;

long d;
long e[500];
long f;

typedef long (WINAPI *GetED)(long,long,long,long*,long[],long*);
HMODULE hModule;
hModule = ::LoadLibrary(L"FKAttend.dll");
if (!hModule)
{
MessageBox(NULL,L"DLL加载失败",L"LoadLibrary",MB_OK);
return S_FALSE;
}
GetED geted=(GetED)::GetProcAddress(hModule,"FK_GetEnrollData");
if (!geted)
{
MessageBox(NULL,L"获取函数地址失败",L"GetProcAddress",MB_OK);
return S_FALSE;
}

geted(CAttendEx::nHandleIndex,a,b,&d,e,&f);

str.Format(L"%ld,%ld,%ld",&d,e,&f);
*bstr = str.AllocSysString();
memcpy(c, bstr, sizeof(bstr));

freeLibrary(hModule);

return S_OK;
}

急啊,改成数组的调用也显示不出来
yxder 2009-07-07
  • 打赏
  • 举报
回复
直接返回不来值了!我那段代码如下:
STDMETHODIMP CAttendEx::GetEnrollDataSC(LONG a, LONG b, BSTR* c)
{
// TODO: 在此添加实现代码

CString str;
BSTR *bstr=NULL;

long d;
long e;
long f;

typedef long (WINAPI *GetED)(long,long,long,long*,long[],long*);
HMODULE hModule;
hModule = ::LoadLibrary(L"FKAttend.dll");
if (!hModule)
{
MessageBox(NULL,L"DLL加载失败",L"LoadLibrary",MB_OK);
return S_FALSE;
}
GetED geted=(GetED)::GetProcAddress(hModule,"FK_GetEnrollData");
if (!geted)
{
MessageBox(NULL,L"获取函数地址失败",L"GetProcAddress",MB_OK);
return S_FALSE;
}

geted(CAttendEx::nHandleIndex,a,b,&d,&e,&f);

str.Format(L"%ld,%ld,%ld",&d,&e,&f);
*bstr = str.AllocSysString();
memcpy(c, bstr, sizeof(bstr));

freeLibrary(hModule);

return S_OK;
}

还望高手指点!
ysysbaobei 2009-07-07
  • 打赏
  • 举报
回复
顶下
yxder 2009-07-07
  • 打赏
  • 举报
回复
TO:luwenzhuo

我想要的是这个,但是不知道能不能测试成

还有一个问题就是 其中的一个存储的数据很长
我测试完回复
LiuTaiYe 2009-07-07
  • 打赏
  • 举报
回复
楼主应该就是要这个
「已注销」 2009-07-07
  • 打赏
  • 举报
回复
DLL已经编译好了?
如果已经编译好了,就别幻想了!
大前置 2009-07-07
  • 打赏
  • 举报
回复
USES_CONVERSION;


long fun(long a1,long b1,BSTR *c1)
{
CString str;
BSTR *bStr=NULL;

long c,d,e;

fun(a1,long b1, &c, &d, &e);
str.Format("%ld%ld%ld", c, d,e);
bStr = str.AllocSysString();
memcpy(c1, bStr, sizeof(BSTR));
return 0;
}
Walf_ghoul 2009-07-07
  • 打赏
  • 举报
回复
不知道。帮顶
Fleeboy 2009-07-07
  • 打赏
  • 举报
回复
楼主找本<<windows编程>>看看
Fleeboy 2009-07-07
  • 打赏
  • 举报
回复
当然可以的。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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