主 题: 如何在Sql server中调用Dll,并且可从Dll中得到返回的数据
作 者: visual (胖都胖的那么帅)
等 级:
信 誉 值: 100
所属论坛: MS-SQL Server 基础类
问题点数: 100
回复次数: 6
发表时间: 2002-09-19 11:00:40Z
我想用Sql server调用Delphi写的dll.
<Code>
CREATE PROCEDURE sp_WSSql AS
exec sp_addextendedproc "StrTest", "WSSql.dll" --声明函数
declare @szStr varchar(200)
declare @rtStr varchar(200)
Select @szStr = 'ws中文'
EXEC @rtStr = StrTest @szStr
select @rtStr
exec sp_dropextendedproc "StrTest"
dbcc StrTest(free)
GO
</code>
<DllCode Lan=Delphi>
library WsSql;
{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }
uses
SysUtils,
Classes;
{$R *.res}
function StrTest(S:pChar):pChar;stdcall;
begin
Result:=pChar('您输入的字符串:'+S);
end;
Exports
StrTest name 'StrTest';
begin
end.
</DllCode>
---------------------------------------------------------------
我在调用时没发现什么错误,可是我得不到返回的值,在存储过程中的select @rtStr得到的是扩展存储过程执行后的句柄。我该如何得到Dll中的返回值。
谢谢。
对了,还有如果我以其他用户登陆,是否也可执行Master中的存储过程?
再谢。
回复人: microlong(微龙) ( ) 信誉:128 2002-09-19 11:44:29Z 得分:30
可以利用扩展存储过程!
XP——CMDSHELL
Top
回复人: leimin(黄山光明顶) ( ) 信誉:290 2002-09-19 12:12:36Z 得分:40
SQL 好像不可以调用DELPHI的DLL,你可以用VC OR JAVA写的DLL,再通过SQLSERVER的
sp_addextendedproc
将新扩展存储过程的名称注册到 Microsoft® SQL Server™ 上。
语法
sp_addextendedproc [ @functname = ] 'procedure' ,
[ @dllname = ] 'dll'
注册到SQLSERVER
这样你就可以EXEC SP_YOUEXTENDPROC
有如果我以其他用户登陆,是否也可执行Master中的存储过程?
只要该用户 sysadmin 固定服务器角色的成员才可以执行
Top
回复人: visual(胖都胖的那么帅) ( ) 信誉:100 2002-09-19 13:13:39Z 得分:0
那用VC怎样写呢?
例如有这样一个函数
String StrTest(string S)
{
return "您的字符串:"+S;
}
在存储过程中怎样调用可得到返回的字符串
Top
回复人: N_chow(双色铅笔 | XML beginner) ( ) 信誉:101 2002-09-19 13:42:57Z 得分:30
1、寫成擴展的存儲過程。
在SQL Server/Develop/Sample下面有例子,可以去參考。
2、寫成COM,在T-SQL中用sp_OACreate、sp_OAMethod來調用。
可以查查FAQ,應該有同類的例子。