1

SQL2012 と VS2012 を使用しています。

SQL テーブルのトリガーが起動されたときに dll によって更新されるファイルの日付とタイム スタンプを監視するために、このソリューションを実装したいと思います。

これが私がやろうとしていることです。

MSDN の記事を参照するもの

私は指示に従いましたが、これを得ました:

Msg 17750, Level 16, State 0, Procedure xsp_UpdateSignalFile, Line 1
Could not load the DLL XSP.dll, or one of the DLLs it references. Reason: 193(%1 is not a valid Win32 application.).

私はSQL2012 64ビットを使用しているためだと思います。

XSP.DLL ソースをダウンロードして VS2012 で調べましたが、 opends60.libのコピーを見つけた後でもコンパイルできません。

Error 4    error LNK2019: unresolved external symbol _srv_rpcparams referenced in function _xsp_UpdateSignalFile     C:\Users\Administrator\Documents\xsp.dll\WickedCode0304\XSP\XSP.obj  XSP

これを 64 ビットにコンパイルするには、C++ ウィザードを使用できますか?

受信したパラメーターを解決できないと言っていますか?

.cpp ファイルは次のようになります。

#include <windows.h>
#include <srv.h>

///////////////////////////////////////////////////////////////////////
// Entry point

extern "C" BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD dwReason,
    LPVOID lpReserved)
{
    return TRUE;
}

///////////////////////////////////////////////////////////////////////
// Exported functions

extern "C" __declspec (dllexport)
ULONG __GetXpVersion ()
{
   return ODS_VERSION;
}

extern "C" __declspec (dllexport)
SRVRETCODE xsp_UpdateSignalFile (SRV_PROC *srvproc)
{
    //
    // Make sure an input parameter is present.
    //
    if (srv_rpcparams (srvproc) == 0)
        return -1;

    //
    // Extract the file name from the input parameter.
    //
    BYTE bType;
    char file[256];
    ULONG ulMaxLen = sizeof (file);
    ULONG ulActualLen;
    BOOL fNull;

    if (srv_paraminfo (srvproc, 1, &bType, &ulMaxLen, &ulActualLen,
        (BYTE*) file, &fNull) == FAIL)
        return -1;

    if (bType != SRVBIGCHAR && bType != SRVBIGVARCHAR)
        return -1;

    file[ulActualLen] = 0;

    //
    // Update the file's time stamp.
    //
    char path[288] = "C:\\AspNetSql\\";
    lstrcat (path, file);

    HANDLE hFile = CreateFile (path, GENERIC_WRITE, 0, NULL,
        CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (hFile != INVALID_HANDLE_VALUE)
        CloseHandle (hFile);

    return 0;
}
4

1 に答える 1

0

これは、SQL Server 2008 SP3 Dev 64 ビットと、Win 7 Pro 64 ビットで実行されている VS 2012 Ultimate を使用して動作しました。これが私がしたことです:

  1. Empty ProjectVSのテンプレートから新しい を作成しVC++、空の C++ ファイルを追加しました。
  2. のプラットフォームをx64に変更しましたConfiguration manager
  3. Configuration TypeDynamic library (.dll)下に変更Configuration Properties/General
  4. を取得するために、を含むSQL x64 ネイティブ クライアントをインストールしました。SDK コンポーネントが実際に必要かどうかはわかりません。SQL Server Native Client SDKopends60.lib
  5. リンカー オプションに追加C:\Program Files\Microsoft SQL Server\90\SDK\Lib\x64されました。Additional library directoriesこれは、ネイティブ クライアントがインストールされた場合です。
  6. リンカー オプションに追加opends60.libされました。Additional dependencies
  7. エラーなしでコンパイルされました。
  8. が使用する出力ディレクトリを作成しましたXSP.dll: C:\AspNetSql\.
  9. XSP.dllを手順 8 で作成したディレクトリにコピーします。
  10. 以下を使用して拡張ストアド プロシージャをインストールしました。

    USE master
    EXEC sp_addextendedproc 'xsp_UpdateSignalFile', 'C:\AspNetSql\XSP.dll'
    GRANT EXECUTE ON xsp_UpdateSignalFile TO PUBLIC

  11. を使用して実行し、出力ディレクトリにmaster..xsp_UpdateSignalFile 'Quotes.Quotations'ファイルが作成されていることを確認して動作を確認しました。Quotes.Quotations

ご不明な点がある場合、または手順を明確にしたい場合は、スクリーンショットを追加したり、詳細情報を提供したりできます。

于 2013-11-13T11:02:04.657 に答える