C#生成的dll,PB调用时说找不到函数入口?

Lezen 2010-03-20 12:08:22
C#生成的dll,PB调用时说找不到函数入口?
c#dll为

...
public class A
{
public string Afunction(int x)
{
return x.ToString();
}
}
...


编译后生成dll文件,pb使用dll的Afunction函数报找不到函数入口?

怎么样才能让我在c#里写的dll,在pb或其它开发工具中可以使用?
各位专家,教授,指点一下,多谢了。
...全文
541 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinfujun 2012-05-22
  • 打赏
  • 举报
回复
我来学习下,正在做这个
fengdong_2007 2010-03-20
  • 打赏
  • 举报
回复
C#编写程序供第三方使用,好像只能用COM吧
ChrisAK 2010-03-20
  • 打赏
  • 举报
回复
忘了写一条.
程序集已经用regasm之类的工具注册
xingyuebuyu 2010-03-20
  • 打赏
  • 举报
回复
倒,回错贴了.

http://topic.csdn.net/u/20100320/00/cf7735c7-eac1-4db9-ab48-3f9c96e9ae9c.html

上面的贴不是告诉你了吗,C#生成的DLL不能使用Dllimport 来调用,因为不是 Win32 API类型的DLL.

C#编写COM类型的DLL才能让PB调用,但也不是通过Dllimport 来调用的

按下面的步骤做写COM型的DLL
http://topic.csdn.net/u/20081106/13/8a7534c3-718a-4532-b855-a2f610d8c982.html

http://my.execpc.com/~gopalan/dotnet/complus/complus.net_accountmanager.html
ChrisAK 2010-03-20
  • 打赏
  • 举报
回复
C#写的DLL是托管DLL,据我所知的呃托管DLL是无法导出函数的.
C#编写的库和其它非托管程序交互的一般方法是:
1.程序集必须是强签名的;
2.程序集已安装到系统的GAC;
3.要调用的类是public的且标记为Comvisible

这样就能通过任何支持COM和自动化的语言调用C#编写的库了(VBS/JS)
mayonglong 2010-03-20
  • 打赏
  • 举报
回复
学习来了~
xingyuebuyu 2010-03-20
  • 打赏
  • 举报
回复
c# 2005中编写com组件,供PB11调用实例,研究了一下午,终于成功了,分享给大家 前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#dll时要注意。 1、c#2005中新建项目,类型为类库,项目名为AddCom确定。   配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“生成”,选择“为COM Interop注册(_P)” 2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用 3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,网上下一个生成guid的软件,有很多呢。 4、c#中源代码如下,按如下方法编写代码后生成工程,/bin/release中得到AddCom.dll。 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace AddCom { [Guid("298D881C-E2A3-4638-B872-73EADE25511C")] public interface AddComInterface { [DispId(1)] int iadd(int a, int b); } [Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")] [ClassInterface(ClassInterfaceType.None)] public class AddComService : AddComInterface { public AddComService() { } public int iadd(int a, int b) { int c = 0; c = a + b; return c; } } } 5、dos下利用 e:\regasm AddCom.dll 命令注册com组件,可以理解为非.net平台下的regsvr32注册dll组件。提示注册成功即可。 6、pb11中利用ole调用调用com组件,注意,此com组件无法用create ole control的browse查看到,只能利用如下的方法直接动态调用。 integer li_a,li_b,li_total //----------注册c#生成的com组件------------ OleObject ole_AddCom ole_AddCom = Create OLEObject li_rc = ole_AddCom.ConnectToNewObject("AddCom.AddComService") //AddCom为c#中namespace,AddComService为c#中namespace中的class if li_rc <> 0 then MessageBox("ConnectToNewObject", string(li_rc) ) return end if //----------调用com组件中的函数-------------- li_total = ole_AddCom.iadd(li_a, li_b) //iadd为c#中namespace(AddCom为c)中class(AddComService为c)中的函数(iadd()) 完毕 *以上为个人经验,欢迎大家发邮件沟通。 email: kair-china@vip.sina.com qq: 55092518
提供给第三方软件,调用COM组件DLL方式进行实现,如delphi、PB等。调用方法与黑龙江省医保社保卡调用方式一致。各软件调用方法也可自行网上查询,如“delphi调用C#的COM组件DLL”。 基于C#编写的COM组件DLL,可实现SM2签名验签,SM4加解密,100%适用于黑龙江省国家医保接口中进行应用。 1、调用DLL名称:JQSM2SM4.dll 加解密类名:JQSM2SM4.SM2SM4Util CLSID=5B38DCB3-038C-4992-9FA3-1D697474FC70 2、GetSM2SM4函数说明 函数原型public string GetSM2SM4(string smType, string sM2Prikey, string sM4Key, string sInput) 1)参数一smType:填写固定字符串,识别功能,分别实现SM2签名、SM4解密、SM4加密。SM2签名入参填写“SM2Sign”、SM4解密入参填写“SM4DecryptECB”、SM4加密入参填写“SM4EncryptECB”. 2)参数二sM2Prikey:SM2私钥 3)参数三sM4Key:SM4密钥 4)参数四sInput:当smType=SM2Sign,则sInput入参填写SM4加密串;当smType=SM4DecryptECB,则sInput入参填写待解密SM4密文串;当smType=SM4EncryptECB,则sInput入参填写待加密的明文串; 5)函数返回值:当smType=SM2Sign,则返回SM2签名信息;当smType=SM4DecryptECB,则返回SM4解密信息;当smType=SM4EncryptECB,则返回SM4加密信息;异常时,则返回“加解密异常:详细错误说明” 3、购买下载后,可加QQ65635204、微信feisng,免费提供技术支持。 4、注意事项: 1)基于.NET框架4.0编写,常规win7、win10一般系统都自带无需安装,XP系统则需安装;安装包详见压缩包dotNetFx40_Full_x86_x64.exe 2)C#编写的DLL,需要注册,解压后放入所需位置,使用管理员权限运行“JQSM2SM4注册COM.bat”即可注册成功,然后即可提供给第三方软件进行使用,如delphi、PB等。

110,524

社区成员

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

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

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