C#如何开发一个其它任何作程序可直接调用的dll

xiulinwang123 2011-11-28 07:53:54
C#如何开发一个其它任何作程序可直接调用的dll,像delphi一样创建library,还要公布方法,.net如何写呢
一般直接用vs创建的类别库那都是托管,不能直接在其它程式中调用,请各位赐教,再一个像delphi都是要公布方法的,在.net中如何编写要公布出动的方法,直接public static就可以吗?还是用其它方法,不甚感激!!
...全文
463 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiulinwang123 2011-12-06
  • 打赏
  • 举报
回复
用此方法可以公布到非托管環境,我已經找一台沒有安裝.net framework的電腦,用編譯好的delphi程式調用呢.結果是可行的.

不過目前我碰到另一個問題,delphi在發布dll時,參數都聲明成pchar,這樣別的程式通過傳入一個空的字符參數都可以得到返回值,只要dll內部對此參數進行賦值.而完全不需要取方法的返回值,公司遺留的產品測試程式都是這樣訪問早前開發的delphi dll.現在用此方法,卻無法通過參數得到返回值,所以想請問如何在.net中去聲明pchar類型參數,是用char[]*類型嗎? 可是如何給它賦字符串值呢?
還請賜教!
jshi123 2011-11-29
  • 打赏
  • 举报
回复
可以用啊,注意用pchar传递字符串:
type TGetString = function(name:pchar):pchar; stdcall;
xiulinwang123 2011-11-29
  • 打赏
  • 举报
回复
謝謝 jshi123

我用了它的工具,在.net中開了console application可以直接用DllImport調用,確實方便了不少,非常感謝你的推薦,這工具很好用。

另外我嘗試用delphi去靜態或動態調用公布的方法都不行,不知你嘗試沒有?delphi源碼如下。
DummyLibrary.dll是這位俄国老外做的一個類庫,用delphi調用其中的sayhello是有問題的
還請各位想辦法解決此問題

TGetString = function(name:string):string;stdcall;
var
dllHandle:THandle;
fun:TGetString;
aword:string;
begin
dllHandle := LoadLibrary('C:\DummyLibrary.dll');
try
@fun : = GetProcAddress(dllHandle,'SayHello');
if Assigned(@fun) then
begin
aword:=fun('hello');
end;
finally
freelibrary(dllHandle);
end;
end;
足球中国 2011-11-29
  • 打赏
  • 举报
回复
c#写的dll虽然以com的方式可以在别的软件下使用。比较bug特多。最近弄的一个就挺麻烦。还是vc弄好一些。
assky124 2011-11-29
  • 打赏
  • 举报
回复
改成Web吧,整个WebService,基本的语言都支持的
vrhero 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 xiulinwang123 的回复:]

非常感谢,这样是可以直接调用了,这样形成的dll才是真正的动态链接库,可以任何程式中调用,而非局限.net环境
[/Quote]
想得美啊你...虽然.NET COM+是标准COM组件,一样离不了.NET Framework...“任何”是不可能的,.NET COM+连mono都支持不了...
xiulinwang123 2011-11-29
  • 打赏
  • 举报
回复
非常感谢,这样是可以直接调用了,这样形成的dll才是真正的动态链接库,可以任何程式中调用,而非局限.net环境
xiulinwang123 2011-11-28
  • 打赏
  • 举报
回复
我現在是用.net做dll給其它程式調用,並不是.net開發的程式,delphi就有創建library這樣的功能,開發時隻要公布方法,編譯後就可以調用, 所以想請教.net如何做? 給出具體點的步驟,感謝!
山东蓝鸟贵薪 2011-11-28
  • 打赏
  • 举报
回复
只要是其它语言开发的DLL做好通用接口即可
mjp1234airen4385 2011-11-28
  • 打赏
  • 举报
回复
不管是dll还是com形式的,都需要dotnet环境的支持。
因此,不要妄想抛开dotnet环境。


换语言吧。vb、vc、delphi
朕赐你肥皂 2011-11-28
  • 打赏
  • 举报
回复
嗯,只能是以COM组件形式去做,调用需要注册
qiume 2011-11-28
  • 打赏
  • 举报
回复
用C、C++或Delphi......
jshi123 2011-11-28
  • 打赏
  • 举报
回复
com组件可以在delphi中使用,.net framework都是需要的。
除了com,也可以写一个C++/CLR工程包裹c#类库,这里有个俄国老外写的工具,可以自动做这件事情:
http://www.codeproject.com/KB/dotnet/DllExporter.aspx
Just4life 2011-11-28
  • 打赏
  • 举报
回复
好像只能做COM形势的DLL吧 调用时需要注册

其他的dll形势 做不了喽
xiulinwang123 2011-11-28
  • 打赏
  • 举报
回复
将.net托管dll转换成com组件,部署出去仍然需要.net环境吗?需要安装.netframework吗?
bdmh 2011-11-28
  • 打赏
  • 举报
回复
其实基于.net的dll也可以调用,不过就是麻烦点,要注册com的形式被其他程序调用,非托管dll,它干不了
绿领巾童鞋 2011-11-28
  • 打赏
  • 举报
回复
恩,帮顶了,楼下请继续
wlm786803535 2011-11-28
  • 打赏
  • 举报
回复
好像不是很难啊
xiulinwang123 2011-11-28
  • 打赏
  • 举报
回复
C#直接創建類別庫專案形成的dll是托管的,無法在其它程式中引用,所以必須要將類別庫dll變成com dll.
我有個問題再問大家,delphi開發出來的dll是.net開發的com dll是一致的嗎?他們都可以直接在任何程式中引用嗎?
xiulinwang123 2011-11-28
  • 打赏
  • 举报
回复
自己頂下

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧