1

我在我的 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. 例如创建一些功能

    无效 thisstart() { }

然后我想在这个启动函数中调用我在 dll 项目中创建的 ac 文件/模块中的 start() 函数。

所以它应该看起来像:

void thisstart()
  {
    start();
  }

哪里开始();来自 c 模块/文件

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

编辑

这是 main.h 的内容:

namespace dllproj{

    extern "C" void start();
    void thisstart();
}

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

  1. 错误 2 错误 C2054: 预期 '(' 跟随 'namespace'
  2. 4 IntelliSense:需要一个标识符

然后这是现在的cpp文件内容:

#define dllproj;

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

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

我收到两个错误:

  1. 在定义行上:错误 1 ​​错误 C2008:';' : 宏定义中的意外
  2. 在 dllproj;::start(); 错误 3 错误 C2143:语法错误:缺少 ';' 前 ':'

请向我展示完整的解决方案并向我解释稍后我将在 CSHARP 中使用哪个变量来为它创建一个实例并在 cpp 中调用此函数?

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

4

1 回答 1

1

来自评论“start()在(我创建test.c的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();
 }

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

于 2013-04-25T16:45:52.147 回答