本人是做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应该怎么调用?

解决方案 »

  1.   

    extern "C" __declspec(dllexport) void ASCToHEX(unsigned char *sAsc,long len,unsigned char *sHex);  我想知道unsigned char *这样的类型javascript怎么传值
      

  2.   

    unsigned char *sHex参数为输出返回[out,retval]类型 
    =====
    应该为 unsigned char** 
      

  3.   

    改了后,javascript调用时出错了,提示:参数不必配
      

  4.   

    客户提供了一个不可注册的DLL,其中有一个方法是:
    void ASCToHEX(unsigned char *sAsc,long len,unsigned char *sHex);  
    现在想做一个可注册的DLL,大家帮我看看应该怎么调用。给个例子啊,谢谢。回头一定加分。
      

  5.   

    vc有一个ActiveX控件测试容器的工具,建议你先使用它试试你的控件,能不能运行
      

  6.   

    STDMETHODIMP MyICard::ASC2HEX(BSTR sAsc, long len, BSTR *sHex)
    {
    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”呢
      

  7.   

    不能类型转换(char*)BSTR,建议多看msdn
      

  8.   

    客户没有提供type library?
      

  9.   


    提供了,现在问题就是他们的接口函数的参数类型都是unsigned char*,要想被javascript调用必须得换成其它参数类型才行,现在要么返回乱码,码么返回的数据变成了双位数