龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

在存储过程中调用外部的动态连接库(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
int n; char srt[3] = {0x0d, 0x0a, 0}; char * c = new char[cbActualLen + 3]; if (!c)return XP_ERROR; ZeroMemory(c, cbActualLen + 3); memcpy(c, srv_paramdata(pSrvProc, 1), cbActualLen);
        int n;
        char srt[3] = {0x0d, 0x0a, 0};

        char * c = new char[cbActualLen + 3];
        if (!c)return XP_ERROR;

        ZeroMemory(c, cbActualLen + 3);
        memcpy(c, srv_paramdata(pSrvProc, 1), cbActualLen);
        memcpy(c+cbActualLen, srt, 3);

        HANDLE hf = CreateFile(szFileName, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL,
                 OPEN_ALWAYS, 0, NULL);
        if (hf == INVALID_HANDLE_VALUE){
            WriteInfo("addline create file err ");
            delete []c;
            return XP_ERROR;
        }

        WriteInfo("addline create file ok ");
        DWORD dwWt;
        n = strlen(c);
        SetFilePointer(hf, 0, NULL, FILE_END);
        if (WriteFile(hf, c, n, &dwWt, NULL) && dwWt == n)
        {
            WriteInfo("addline write file ok ");
            rt = true;
        }
        delete []c;
        CloseHandle(hf);
    }
    return rt ? XP_NOERROR:XP_ERROR;
}

inline void WriteInfo(const char * str){
#ifdef _DEBUG
    char srt[3] = {0x0d, 0x0a, 0};
    HANDLE hf = CreateFile("c:storeproc.log", GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL,
                 OPEN_ALWAYS, 0, NULL);
    if (hf != INVALID_HANDLE_VALUE){
        SetFilePointer(hf, 0, NULL, FILE_END);
        DWORD dwWt;
        WriteFile(hf, str, strlen(str), &dwWt, NULL);
        WriteFile(hf, srt, strlen(srt), &dwWt, NULL);
        CloseHandle(hf);
    }
    else {
        MessageBox(NULL, "Write info err", "Message", MB_OK|MB_ICONINFORMATION);
    }
    #endif
}

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved)
{
    return TRUE;
}
 

  编译完成后,把动态链接库放到WINNT/System32目录下,启动SQL Server。我们可以打开SQL Server Query Analyzer调用存储过程sp_testdll以测试其运行是否正确。

  具体可参考SQL-Server的在线帮助。
  笔者环境:win2000 professional + SQL-Server7.0(2000也可)
  VC6.0+SP5+Platform SDK 20001.8

  VC知识库测试环境:win2000 professional + SQL-Server 7.0 + VC.Net

精彩图集

赞助商链接