qq_27059271 2017-12-26 01:47 采纳率: 0%
浏览 1471
已结题

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

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

C#中有调用外部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;
}
}

  • 写回答

5条回答 默认 最新

  • perfect_xp 2017-12-26 03:10
    关注

    原则上C++不能调用C#的dll的,除非你用的是托管的C++,如果是原生的C++不能直接调用,需要转成托管C++,即C++.net

    评论

报告相同问题?

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)