本人是做JAVA的,对VC一窍不通,但因为厂商提供的DLL不能直接被IE调用,该DLL定义的头文件如下:
extern "C" __declspec(dllexport) void ASCToHEX(unsigned char *sAsc,long len,unsigned char *sHex);
其中unsigned char *sHex参数为输出返回[out,retval]类型。就自己动手想封装一下,用以下方法:
STDMETHODIMP MyICard::ASC2HEX(VARIANT sAsc, long len, VARIANT *sHex)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
::VariantInit(sHex);
ASCToHEX(sAsc.pbVal,sHex->pbVal);
return S_OK;
}
注册后发现调用成功,然后就试着调用:
<object cls="xxxxxxxxxxxxxxx" id="obj">
</object>
<script>
var str="abcdefg";
var ret=obj.ASCToHEX(str,str.length);
alert(ret);
</script>
一运行IE就自动关闭了。请问各位GGMM应该怎么调用?
extern "C" __declspec(dllexport) void ASCToHEX(unsigned char *sAsc,long len,unsigned char *sHex);
其中unsigned char *sHex参数为输出返回[out,retval]类型。就自己动手想封装一下,用以下方法:
STDMETHODIMP MyICard::ASC2HEX(VARIANT sAsc, long len, VARIANT *sHex)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
::VariantInit(sHex);
ASCToHEX(sAsc.pbVal,sHex->pbVal);
return S_OK;
}
注册后发现调用成功,然后就试着调用:
<object cls="xxxxxxxxxxxxxxx" id="obj">
</object>
<script>
var str="abcdefg";
var ret=obj.ASCToHEX(str,str.length);
alert(ret);
</script>
一运行IE就自动关闭了。请问各位GGMM应该怎么调用?
=====
应该为 unsigned char**
void ASCToHEX(unsigned char *sAsc,long len,unsigned char *sHex);
现在想做一个可注册的DLL,大家帮我看看应该怎么调用。给个例子啊,谢谢。回头一定加分。
{
AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
*sHex = ::SysAllocStringByteLen((char *)sAsc,len);
//memcpy(sHex, sAsc, len);
MessageBox(NULL,(char *)*sHex,"",MB_OK);
return S_OK;
} <BODY>
<OBJECT ID="obj" CLASSID="CLSID:3F6123A6-C8C5-4B45-8507-4FAAA86EDF90">
</OBJECT>
<script>
obj.ASC2HEX("abcdefg",7);
</script>
</BODY>我传了“abcdefg”,为什么只显示 “a”呢
提供了,现在问题就是他们的接口函数的参数类型都是unsigned char*,要想被javascript调用必须得换成其它参数类型才行,现在要么返回乱码,码么返回的数据变成了双位数