コンソールにテキストを書き込むために、C++ dll を使用して単純な拡張ストアド プロシージャを作成しようとしています。私は次の方法でそれを作りました:
- c++を使用してdllを作成しました(以下の.cppおよび.hファイルを見てください)
- win32コンソールアプリからこのdllをテストしました(すべてtic tak toeとして機能しました)
- 取得したdllファイルをSQLサーバーのbinディレクトリに移動します
sp_addextendedproc 'xp_test','xp_test.dll'
管理スタジオから実行- 拡張 proc(
exec xp_test
)を実行しました
最後のステップを実行すると、クエリが正常に実行されたことを通知するプロンプトが表示されますが、期待される hello world プロンプトを含むコンソール ウィンドウはありません。私のせいはどこですか?
//test.h file
#ifdef MYLIBAPI
#else
#define MYLIBAPI extern "C" __declspec(dllimport)
#endif
#include <srv.h>
MYLIBAPI SRVRETCODE xp_test(SRV_PROC *srvproc);
// xp_test.cpp : Defines the exported functions for the DLL application.
#include "stdafx.h"
#define MYLIBAPI extern "C" __declspec(dllexport)
#include "test.h"
#include <iostream>
using namespace std;
SRVRETCODE xp_test(SRV_PROC *srvproc){
cout << "Hello world" << endl;
cin.get();
return 0;
}
コンソール API も使用しようとしましたが、これもコンソールへの書き込みを許可しません
SRVRETCODE xp_test(SRV_PROC *srvproc){
AllocConsole();
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD writtenCount;
LPCTSTR msg = L"Hello world\n";
WriteConsole(out, msg, lstrlen(msg), &writtenCount, NULL);
Sleep(5000);
return 0;
}