如何在dll项目中用c ++创建命名空间和构造函数?

时间:2013-04-25 15:59:05

标签: c# c++ c

我在visual studio 2012 pro上创建了一个新的dll项目,主要的.cpp文件是空的,除了这一行:

#include "stdafx.h"

在这个dll项目中,我有一个新的c语言项(模块),我添加了一些函数。

实际上我想在我的主.cpp文件中创建一些函数来调用c项(模块)中的函数。

例如在.cpp文件中我会有这样的东西:

void start()

{

   encoder.start();

}

然后在.cpp中我需要添加一个构造函数,以便我可以在那里调用start()

我该怎么做?

这是我的解决方案中的一个示例我有两个项目一个控制台应用程序一个DLL。 这是来自控制台应用程序项目的主cpp文件的内容:

#include "stdafx.h"
#include "targetver.h"

extern "C" {
    void  video_encode_example(const char *filename);
}


int _tmain(int argc, _TCHAR* argv[])
{

    video_encode_example("adi.avi");
    return 0;
}

vide_encode_example是我在控制台应用程序项目中创建的此c项(文件/模块)的函数。我有一个名为example.c的文件,video_encode_example在example.c中。

现在我在解决方案中添加了一个新的dll项目,而main.cpp文件是空的,除了行:#include“stdafx.h”

我想在main.cpp中的这个dll项目中做的是两件事:

  1. 创建一些功能,例如

    void thisstart()    {    }

  2. 然后我想在这个start函数中调用一个start()函数,它在我在dll项目中创建的c文件/模块中。

    所以看起来应该是这样的:

    void thisstart()
      {
        start();
      }
    

    其中start();来自c模块/文件

    然后我将在c#中使用这个dll,在c#中我希望能够使用thisstart()函数。

    修改

    这是main.h的内容:

    namespace dllproj{
    
        extern "C" void start();
        void thisstart();
    }
    

    我现在在dllproj上遇到两个错误:

    1. 错误2错误C2054:预期'('跟随'命名空间'
    2. 4智能感知:预期标识符
    3. 然后这是cpp文件内容:

      #define dllproj;
      
      #include "stdafx.h"
      #include "targetver.h"
      #include "main.h"
      
      void thisstart()
       {
           dllproj;::start();
       }
      

      我遇到两个错误:

        定义行上的
      1. :错误1错误C2008:';' :宏定义中的意外情况
      2. 在dllproj; :: start();错误3错误C2143:语法错误:缺少';'在':'之前
      3. 请告诉我完整的解决方案,并向我解释CSHARP后面的哪个变量,我将使用dll为它创建一个实例并在cpp中调用此函数?

        在csharp中例如我添加dll:test = new something();然后test.thisstart();

1 个答案:

答案 0 :(得分:0)

来自评论“start()是在(c语言文件i create test.c)的dll项目中”

1)创建一个头文件,例如main.h,并添加以下内容

namespace dllproj{

    extern "c" 
    {
       extern void start();
    }
    void thisstart();
}

2)将main.h添加到main.cpp并定义thisstart()

 void dllproj::thisstart()
 {
     dllproj::start();
 }

确保在dll中使用__declspec(dllexport)声明start()。