目的
本篇文章主要介绍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;