首页 新闻 会员 周边

C#生成的类库 dll 无法在其它机注册

0
悬赏园豆:200 [已解决问题] 解决于 2017-12-27 09:24

        目前遇到c++调用C#写的DLL 问题,把C#的DLL注册为COM组件,在本机测试完成了,但在客户的机器上无法通过,注册的方式是通过Regasm 去注册dll 和tlb文件 ,但是排查注册表的时候发现未完全注册进去,在其它机器上是否需要加codebase,请各位大神帮帮忙,感谢

问题补充:

C# dll调用了外部的dll  

这是源码

 

接口:

[Guid("3965F09B-9EE3-42F7-9908-CCA1BEC8603C")]
public interface ICalc
{
[DispId(1)]
void Join(string a,string b, out string c);
}

 

 

 

类:

[Guid("ABFADDE2-185D-4118-BC54-57458343BD8A")]
[ClassInterface(ClassInterfaceType.None)]
public class Calc:ICalc
{
public void Join(string a, string b, out string c)
{
string url = "tcp://10.1.1.198:8085";
ClientUtils.url = url;
string cc = string.Empty;
//DataSet ds = new DataSet();
//string ssql = "select * from sajet.sys_emp where emp_no = '" + b + "'";
//ds = ClientUtils.ExecuteSQL(ssql);
//if (ds.Tables[0].Rows.Count > 0)
//{
// cc = ds.Tables[0].Rows[0]["EMP_NAME"].ToString();
//}
//else
//{
// cc = "NG";
//}
//c = cc;
//return;

if (a == "1")
{
object[][] Params = new object[16][];
Params[0] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet1", a };
Params[1] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet2", b };
Params[2] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet3", "" };
Params[3] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet4", "" };
Params[4] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet5", "" };
Params[5] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet6", "" };
Params[6] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet7", "" };
Params[7] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet8", "" };
Params[8] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet9", "" };
Params[9] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet10", "" };
Params[10] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet11", "" };
Params[11] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet12", "" };
Params[12] = new object[] { ParameterDirection.Input, OracleType.VarChar, "tsajet12ton", "" };
Params[13] = new object[] { ParameterDirection.Input, OracleType.VarChar, "trev", "" };
Params[14] = new object[] { ParameterDirection.Output, OracleType.VarChar, "TRES", "" };
Params[15] = new object[] { ParameterDirection.Output, OracleType.VarChar, "tnextproc", "" };

DataSet ds2 = ClientUtils.ExecuteProc("SAJET.COMMAND_CODE_OTP", Params);
cc = ds2.Tables[0].Rows[0]["TRES"].ToString();
}

c = cc;
return;
}
}

Chirs的主页 Chirs | 初学一级 | 园豆:2
提问于:2017-12-26 09:17
< >
分享
最佳答案
0

c是否已执行此过程:项目右键》“属性”》“生成”》“为COM互操作注册”

收获园豆:200
花飘水流兮 | 专家六级 |园豆:13560 | 2017-12-26 09:22

这两个都有勾选

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:24

@Chirs: 

https://www.cnblogs.com/huangmianwu/p/6145044.html     com+;

https://www.cnblogs.com/yilin/p/csharp-activex.html     activex;

你参考一下,看看接口实现没。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-26 09:31

@花飘水流兮: 我是按照第一个链接写的,本机可以实现,但是在其它机器上报错,  如果在其它机器上装了VS 通过VS去生成,这样子也可以实现,但是不可能每一台 客户的机子都转VS的  所以现在问题卡在这里

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:34

@花飘水流兮: 还有,第一个链接哪里那个 通过用Regasm注册那一步骤需要有什么特别注意的地方么

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:36

@Chirs: 生成后就跟vs没关系了,应该是你的Framework、regasm.exe之类的环境版本问题,你对比一下。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-26 09:41

@Chirs: 

一路OK了,现在说明你的问题多半是环境问题。

过程(除了vs安装的过程注入的参数)暂无没有其他参数,那么首先检查Framework执行环境和regasm.exe的版本。

 

Microsoft .NET Framework 程序集注册实用工具版本 4.7.2556.0
(适用于 Microsoft .NET Framework 版本 4.7.2556.0) —— 注意
版权所有 (C) Microsoft Corporation。保留所有权利。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-26 09:50

@花飘水流兮: 请问下您有没有在其它机器测试一下?

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:53

@花飘水流兮: 可以加一下QQ联系下么

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:55

@花飘水流兮: 我很需要解决这个问题,如果您能帮助我解决,可以有偿的

Chirs | 园豆:2 (初学一级) | 2017-12-26 09:55

@花飘水流兮: regasm版本不同是否有影响

Chirs | 园豆:2 (初学一级) | 2017-12-26 10:04

@Chirs: 

Microsoft .NET Framework 程序集注册实用工具版本 4.7.2556.0
(适用于 Microsoft .NET Framework 版本 4.7.2556.0) —— 注意
版权所有 (C) Microsoft Corporation。保留所有权利。

看“注意”行 —— 微软已经说得清楚了。

花飘水流兮 | 园豆:13560 (专家六级) | 2017-12-26 10:08
其他回答(2)
0

将目标平台(platform)从Any CPU改为x64x86试试

dudu | 园豆:30994 (高人七级) | 2017-12-26 10:02

调用了外部DLL会有影响么

 

支持(0) 反对(0) Chirs | 园豆:2 (初学一级) | 2017-12-26 10:05

@Chirs: 建议先用x64试试

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2017-12-26 10:09

@Chirs: 缺少引用的文件,当然会有影响

支持(0) 反对(0) 新的开始 | 园豆:679 (小虾三级) | 2017-12-26 16:11

@新的开始: 没有缺少  

支持(0) 反对(0) Chirs | 园豆:2 (初学一级) | 2017-12-26 16:17
0

mark.

JoesWeek | 园豆:225 (菜鸟二级) | 2017-12-26 14:27

666666

支持(0) 反对(0) JoesWeek | 园豆:225 (菜鸟二级) | 2017-12-26 14:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册