我正在尝试使用 C++ dll 编写简单的扩展存储过程,以便将一些文本写入控制台。我已经通过以下方式做到了:
- 使用 c++ 创建了一个 dll(查看下面的 .cpp 和 .h 文件)
- 从 win32 控制台应用程序测试了这个 dll(都作为井字游戏工作)
- 将获取的 dll 文件移动到 sql server 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;
}