我有一个使用COM DLL一个VB6应用程序。 该DLL是用C#。 在C#项目属性我有“注册为COM互操作”选项选中。 在VB6应用程序工作正常,我的机器上。 C#代码遵循以下格式完全相同: CodeProject上C#COM实施例
当部署到其他机器,Regsvr32.exe的给我下面的错误,当我尝试注册DLL:
The module "MyCOM.dll" was loaded but the entry-point DLLRegisterServer was not found.
这是什么意思? 没有教程/文档,我读过有关COM DLL中说的“入口点的DLLRegisterServer”任何东西。
我们有不同的机器上使用RegAsm.exe大问题,所以我们真的需要一个解决方案,我们可以regsvr32.exe的运行而不是会为我们部署(即XP,Vista中,Windows 7,86机,64机的任何工作机等)
什么我需要添加到我的C#代码,使其注册,能够与regsvr32.exe的?
你不能。 管理[标记有ComVisible特性]类库需要与Regasm.exe注册。
您可以从项目+属性的IDE做到这一点,建立标签,注册COM互操作复选框。 如果您运行Regasm.exe通常希望/基本代码命令行选项,这样你就不必把大会在GAC。 另一个选择是让Regasm.exe生成与/ REGFILE选项.reg文件。 你只运行在目标机器上得到更新注册表。
编辑:刚才看到的“重大问题”的话。 注意确保它们是什么,从/代码库短。 你必须挑上64位机器正确的版本。 那里有两个。 而你需要提升的命令提示符中,UAC不制止它。
你可以做一个简单的Windows应用程序和使用下面的代码来注册COM DLL。 确保添加清单文件以管理员身份运行:
...
namespace comregister
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string framework = Environment.GetEnvironmentVariable("SystemRoot") + @"\Microsoft.NET\Framework\v2.0.50727\";
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = openFileDialog1.FileName;
button2.Enabled = true;
button3.Enabled = true;
}
}
private void button2_Click(object sender, EventArgs e)
{
FileInfo fi = new FileInfo(textBox1.Text);
string fn = fi.FullName.Substring(0, fi.FullName.Length - 4);
string dll = "\"" + fi.FullName + "\"";
string tlb = "\"" + fn + ".tlb\"";
Process p = new Process();
p.StartInfo.FileName = framework + "regasm.exe";
p.StartInfo.Arguments = dll + " /tlb:" + tlb + " /codebase";
p.Start();
p.WaitForExit();
label2.Text = "registered";
}
private void button3_Click(object sender, EventArgs e)
{
FileInfo fi = new FileInfo(textBox1.Text);
string dll = "\"" + fi.FullName + "\"";
Process p = new Process();
p.StartInfo.FileName = framework + "regasm.exe";
p.StartInfo.Arguments = dll + " /unregister";
p.Start();
p.WaitForExit();
label2.Text = "unregistered";
}
private void button4_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}