在测试应用程序中没有看到我的DLL函数

时间:2011-02-25 20:49:22

标签: .net visual-c++ c++-cli

我正在使用C ++ / CLI在CLR控制台应用程序中测试一个简单的DLL。 DLL只有一个我正在尝试使用的功能。我正在引用DLL并在项目属性页面中设置Resolve #using Reference,但是我看不到我编写的函数。我猜我可能错过了某处的访问修饰符,但我不确定。以下是我的代码细分:

DLL代码标头:

// LogDLL.h

#pragma once
#using <mscorlib.dll>
using namespace System;


namespace LogDLL {

    public ref class LogFuncs
    {
        // TODO: Add your methods for this class here.
        LogFuncs(){;};
        ~LogFuncs(){;};
        void log_to_file ( System::String ^file, bool overwrite, System::String ^text );
    };
}

DLL代码来源:

#include "stdafx.h"
#include "LogDLL.h"
using namespace System::Globalization;

void LogDLL::LogFuncs::log_to_file ( System::String ^file, bool overwrite, System::String ^text )
{
    //Do Stuff
}

我正在使用的测试代码:

#include "stdafx.h"
#using <LogDLL.dll>
using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    LogDLL::LogFuncs^ a;
    a::LogDLL::LogFuncs:: //<-- Intellisense doesn't show the function from the DLL
    return 0;
}

同样,我不确定我错过了什么。自从我使用C ++ / CLI以来已经有一段时间了,所以我很生气。

更新:

我继续按照彼得的建议将课程改为结构。

已修改的DLL标头代码:

// LogDLL.h

#pragma once
#using <mscorlib.dll>
using namespace System;


namespace LogDLL {

    public ref struct LogFuncs
    {
        // TODO: Add your methods for this class here.
        LogFuncs(){;};
        ~LogFuncs(){;};
        void log_to_file ( System::String ^file, bool overwrite, System::String ^text );
    };
}

我仍然不明白为什么即使我将它指定为公共类,该类仍将默认为私有。这是否存在一些根本原因?如果我使用非托管C ++会不会有任何不同?

1 个答案:

答案 0 :(得分:2)

类的默认访问权限是私有的。要为要公开的成员添加“public:”,要么更改为具有默认访问权限的ref结构。

关于IntelliSense,我假设你正在使用Visual Studio 2005或Visual Studio 2008; Visual Studio 2010不支持用于C ++ / CLI代码的IntelliSense(这是因为解析器已被EDG取代,并且他们在2010版本中没有将C ++ / CLI解析功能改进其中)。

我怀疑IntelliSense会使用您正在使用的语法自动完成。你想要“a-&gt;”相反(当然,在运行此代码之前gcnew)。