0

我想测试扩展存储过程(我知道它们现在已被弃用,但出于个人原因我想测试它们)。

我已经在 VC++ 中生成了一个 dll 文件,这是我的代码:

//First.h
#include<iostream>
#include<srv.h>

using namespace std;

RETCODE _declspec(dllexport)  xp_firstfun(SRV_PROC *srvproc);

//main.cpp
#include<iostream>
#include "First.h"

using namespace std;


RETCODE xp_firstfun(SRV_PROC *srvproc)
{
    cout<<"Hello World froom DLL"<< endl;
    cin.get();
    return 0;
}

我可以使用以下命令成功将此 dll 添加到数据库:

sp_addextendedproc 'xp_firstfun', 'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\FirstDLL.dll'

但如果我尝试执行该功能:

exec xp_firstfun

我正面临这个错误:

在库 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn\FirstDLL 中找不到函数 xp_firstfun。原因:127(未找到程序)。

我有两个问题:

  • 我的 C++ 代码正确吗?
  • 我应该在 SQL 中做更多的事情来在 dll 中调用这个函数吗?

谢谢你的帮助

4

1 回答 1

0

更改您的声明。这可能对您有所帮助,因为在 c++ 中,函数名称在编译期间作为名称修饰的一部分被修改。

extern "C"
{
    RETCODE _declspec(dllexport)  xp_firstfun(SRV_PROC *srvproc);
}
于 2015-03-18T10:59:08.210 回答