0

我正在尝试编写一个使用 tm1api.dll 连接到 Cognos TM1 数据存储的 C# 应用程序。我在 VS C# Express 2008 中创建了一个基本的 shell 项目,并添加了以下代码

public partial class MainPortal : Window
{

    [System.Runtime.InteropServices.DllImport(@"C:\\Program Files\\Cognos\\TM1\\bin\\tm1api.dll", EntryPoint="TM1APIInitialise")]
    public static extern void TM1APIInitialise();

    public MainPortal()
    {
        InitializeComponent();

        TM1APIInitialise();
    }
}

我可以毫无错误地构建这个项目,但是在运行时出现以下错误:

“无法在 DLL 'C:\\Program Files\\Cognos\\TM1\\bin\\tm1api.dll' 中找到名为 'TM1APIInitialise' 的入口点。”

我使用 'dumpbin /exports tm1api.dll' 来确定它的入口点:

    101   5D 00008360 TM1APIFinalize

现在我很茫然,它似乎有一个切入点但确实承认它。谁能指出我正确的方向?

PS。我对 C# 完全陌生,所以我可能会犯一些非常基本的错误 :)

4

3 回答 3

1

尝试这个

public partial class MainPortal : Window
{

    [System.Runtime.InteropServices.DllImport(@"C:\Program Files\Cognos\TM1\bin\tm1api.dll", EntryPoint="TM1APIFinalize")]
    public static extern void TM1APIFinalize();

    public MainPortal()
    {
        InitializeComponent();

        TM1APIInitialise();
    }
}
于 2009-07-24T06:14:41.837 回答
1

看来您的入口点名称错误“TM1APIInitialise”与“TM1APIFinalize”。此外,如果您使用字符串文字 @,则不需要转义反斜杠 \。

于 2009-07-24T06:15:39.557 回答
0

感谢 JP 和 ArsenMkrt,您的回答都让我解决了这个问题。

我将它定义为 TM1APIInitialise,它应该是 TM1APIInitialize。

注意's'而不是'z'(该死的美国拼写):)。

于 2009-07-24T06:28:56.490 回答