用C#编写的DLL,试图导入另一个C#项目(DLL不能在根目录下)

时间:2014-03-26 15:57:01

标签: c# dllimport dllexport

大家好几个小时后搜索并找到了我能找到的东西(因为我能找到的大部分内容都是在C ++上制作的C ++项目,这不是我想要的)我带着一个问题来到这里:D。

我试图运行该程序,但希望DLL文件位于另一个目录中(例如程序位于c:\ Programs \ Program和DLL:c:\ Libs上)。

我在C#中创建了一个公共的各种方法的DLL,我想在我的程序中访问它。

DLL我有这样的东西:

[ComVisible(true)]
[Guid("6E873AA1-1AD6-4325-BBFD-EF22A3EB80CC")]
public interface ITraducoes
{
    [ComVisible(true)]
    void changeLang(String lang);
    [ComVisible(true)]
    void translate(Control form);
    [ComVisible(true)]
    string toolTipText(Control form, String toolTip);
    [ComVisible(true)]
    string[] listText(Control form, String lista);
    [ComVisible(true)]
    string[] getMessagesArray();
    [ComVisible(true)]
    Hashtable getMessagesTable();
}
#region Traducoes Class
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[Guid("AE53E0A3-8261-4706-8861-0249F7390642")]
//[ProgId("ITranslate.Traducoes")]
public class Traducoes : ITraducoes
{...

在程序上,我有类似的东西:

[DllImport("ITranslate.dll", CallingConvention = CallingConvention.Cdecl)]
extern static void translate(Control form);
[DllImport("ITranslate.dll")]
extern static string[] getMessagesArray();

然后我就这样打电话:

public Form1(string[] args){
    InitializeComponent();                  
    translate(this);
    msg = getMessagesArray();

我希望我没有错过任何东西,但如果我这样做,我会尽力提供它。

EDIT。

忘了说,我发现了这个错误

  

无法找到名为' translate'的入口点。在DLL' ITranslate.dll'

1 个答案:

答案 0 :(得分:2)

您不能使用DllImport来引用C#库。

相反,在项目中添加对DLL的引用,并将其用作任何其他引用(例如System.Windows.Forms等)。

你不必拥有类ComVisible或任何东西 - 所有.NET程序集都会公开它们的所有对象和元数据(使用private和这些关键字有些限制,但最后,你可以通过一些工作得到那些。)