javascript 如何传递一个字符串变量给ATL的DLL ,然后再把这个字符串传递给Win32 Dynamic_Link Library 的DLL封装的函数

解决方案 »

  1.   

    1.页面中注册ATL的classid<OBJECT ID="IKeyCom" CLASSID="clsid:3ED10E2F-9303-42E4-8F0E-CCF677FDB0A1"></OBJECT>
    要传入的字符串:<BR><TEXTAREA NAME="strToBeInput" ROWS="4" COLS="60"></TEXTAREA>
    <SCRIPT LANGUAGE="JavaScript">
    function InputString()
    {
    IKeyCom.ATLFunction(strToBeInput.value);
    return;
    }
    </SCRIPT>2.ATL库中的代码STDMETHODIMP CPRJ_ATL::ATLFunction(BSTR InputStr)
    {
        CHAR szStr[MAX_PATH] = {0};
        //将宽字符转换为CHAR类型
        WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, InputStr, -1, szStr, MAX_PATH, NULL, NULL);    WIN32Function(szStr);
    }3.ATL加载win32库typedef BOOL WINAPI fWIN32Function(
        CHAR* szStr
    );
    fWIN32Function WIN32Function;
    HINSTANCE hWin32 = NULL;
    hWin32 = LoadLibrary("win32.dll");
    WIN32Function   = (fWIN32Function *)GetProcAddress(hCTWDAlg,"WIN32Function");
      

  2.   

    ATL DLL定义一个接口,参数用BSTR类型,这样JS就可以直接调用DLL接口的谙熟,传递字符串然后ATL DLL调用普通DLL的导出函数,参数用CHAR*等,BSTR转换就可以了