gpt4 book ai didi

c# - 如何从 sourcecode.c 创建 DLL 库,然后在 C# 中使用它

转载 作者:行者123 更新时间:2023-11-30 21:31:19 24 4
gpt4 key购买 nike

我的 vs2010 中有两个源文件,sample.c 和 q.lib,它们从 q.dll 调用函数,所有这些都是示例代码。我想用这段代码创建一个 dll 并导出一个可以从我的 C# 程序中调用的 void 函数。我尝试用

来扭曲这个函数
extern "c" 
{
__declspec(dllexport) void D()
{
//dosome
}
}

但不适用于 .c,而仅适用于 .cpp 文件,当我将其更改为sample.cpp 时,我遇到了转换错误或类似的错误。我能做些什么 ?谢谢...

<小时/>

我尝试执行 P/Invoke,但只有当我使用以下早期代码公开从 C# 调用的函数时,我才能做到这一点:在.c文件中

    extern "c" 
{
__declspec(dllexport) void D()
{
//dosome
}
}

就像我说的“但不适用于.c,只能使用.cpp文件,当我将其更改为sample.cpp时,我在转换或类似的情况下遇到错误” - c代码非常复杂我不想触及所有代码,而是扭曲一个在复杂的 C 代码中使用其他函数的函数,并仅从我的 C# 代码中调用它。我使用本教程来学习 P/Invoke 工具:[学习 P/Invoke 设施的教程][1][1]:http://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w但就像我说的,它只适用于 .cpp 文件,但我所有的代码都在 .c 文件中!并且这个 - extern "c"在 .c 代码中不起作用。帮助我了解我可以做什么?

最佳答案

extern "c"是 C++ 特定的,因为它告诉编译器“像在 c 中一样”导出函数,因此在 c 中不需要它。

如果你想让它同时使用 c 和 c++ 进行编译,你可以这样做。

#ifdef __cplusplus
extern "C" {
#endif

__declspec(dllexport) void D()
{
}

#ifdef __cplusplus
}
#endif

您还需要告诉 VS 构建一个 dll,而不是可执行文件。

关于c# - 如何从 sourcecode.c 创建 DLL 库,然后在 C# 中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11924707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com