目的

本篇文章主要介绍golang在调用c实现的dll时,具体的一些方式。比如值传递、参数传递、指针等等的一些使用。

一、dll的代码

c实现的dll代码:

hello.h

#ifndef _HELLO_H_

#define _HELLO_H_

#include

#define HELLO_EXPORTS

#ifdef HELLO_EXPORTS

#define EXPORTS_API extern "C" __declspec(dllexport)

#else

#define EXPORTS_API extern "C" __declspec(dllimport)

#endif // HELLO_EXPORTS

EXPORTS_API int add(int left, int right);

EXPORTS_API void show(char* ptr, int nLen);

EXPORTS_API char* change(char* ptr, int nLen);

EXPORTS_API void callByReference(int& nLen);

EXPORTS_API void callByPtr(int* nLen);

#endif //_HELLO_H_

hello.cpp

#include "hello.h"

int add(int left, int right)

{

return left + right;

}

void show(char* ptr,int nLen)

{

printf("> -------------------\n> Pass `pointer` and `int` data:\n");

printf(">> %s, %d\n", ptr,nLen);

}

char* change(char* ptr, int nLen)

{

if (!ptr || 0 > nLen)

return nullptr;

printf("> -------------------\n> Pass `pointer` and `int` data:\n");

printf("> src strings: %s\n",ptr);

ptr[1] = 'a';

printf("> modify strings: %s\n", ptr);

return ptr;

}

void callByReference(int& nLen)

{

nLen = 100;

}

void callByPtr(int* nLen)

{

*nLen = 1000;