DLL char* Add(char* A, char *B) {
int i = strlen(A), j = strlen(B);
int t = 0, l = max(i, j), k = l;
char *S = new char[l + 5];
while(i || j) {
if(i) t += A[--i] - '0';
if(j) t += B[--j] - '0';
S[--k] = t % 10 + '0'; t /= 10;
if(t) {
for(i = l - 1; i >= 0; i--) {
S[i + 1] = S[i];
S[0] = t + '0'; l++;
S[l] = 0;
return S;
给非C和C++语言调用要用stdcall约定,其实只要定义一个宏定义,然后在要允许外部调用的函数前面加上即可
codeblocks会在Debug里面生成dll和一个.def 文件,如下图
打开.def文件可以发现下面这些内容
EXPORTS
_Z3AddPcS_@8 @1
_ZSt3maxIiERKT_S2_S2_ @2
然后_Z3AddPcS就对应了Add在DLL里面的名字,可以发现这个名字是乱码,我们先用易语言来调用测试下
然后就搞定了,那么DLL里面的名字非常乱,下面说下
首先,我们在自动生成的.def上面修改
EXPORTS
add = _Z3AddPcS_@8 @1
_ZSt3maxIiERKT_S2_S2_ @2
然后在codeblocks里面Settings->Compiler->Global compiler settings->Linker settings,点Add把那个.def添加进去
OK以后再编译一次,现在的DLL里的刚刚那个大数相加的函数对应的名字就是Add了,我们再试试
现在就完全搞定了。
有几个要注意的地方:
在生成DLL之前,要先把调用动态链接库的编译器关掉,假如如果是易语言的话,要先把易语言关掉才能生成,因为易语言会一直占用DLL
如果在DLL里面新增加了几个函数,但是最后编译出来不能调用,可能要先把Compiler里的那个.def删掉,然后再编译一次,让编译器自己生成
不过也遇到个问题,就是名字有可能会变化,不知道会不会出现改写好.def之后,函数的名字又变化
感觉也有可能是我没写好什么东西,也希望大神指点~
/************************************我是下划线*******************************************/
后来又改了一份代码,做个备份
#include<cstdio>
#include<cstring>
using namespace std;
#define EPORT extern "C" _stdcall __declspec(dllexport)
#define CPORT __declspec(dllexport)
int max(int a, int b) {
return a > b ? a : b;
EPORT char* Add(char* A, char *B) {
int i = strlen(A), j = strlen(B);
int t = 0, l = max(i, j), k = l;
char *S = new char[l + 5];
while(i || j) {
if(i) t += A[--i] - '0';
if(j) t += B[--j] - '0';
S[--k] = t % 10 + '0'; t /= 10;
if(t) {
for(i = l - 1; i >= 0; i--) {
S[i + 1] = S[i];
S[0] = t + '0'; l++;
S[l] = 0;
return S;
CPORT int main() {
freopen("output.txt", "w+", stdout);
printf("%s\n", Add("1243536542363", "45467586796523456466"));
return 0;
Android 10上滑 安卓向上滑动关闭程序
最近感觉有一个Activity关闭的效果挺不错的,就是手势滑动就可以关闭当前Activity,于是就想写一篇博客和大家一起分享下!废话不多说,老规矩,还先上效果图,更直观! 项目地址:https://github.com/xinyitiandi/SlidingFinishDemo上代码:1.第一个Activity:package com.ekeguan.slidingfinishdemo;