linux动态加载so库

狼来了而已 发布于 2014/03/23 17:00
阅读 349
收藏 1

动态库接口:

extern "C" void _CreateMysql(map<string,string> &dictParam,string param,string &strOut)

{

    ........

}

调用代码:

typedef void (*MyProc)(map<string,string> &dictParam,string param,string &strOut);


void *handle = NULL;
handle = dlopen(szSoName,RTLD_LAZY);
if(!handle)
{
    return;
}
dlerror();
MyProc pFun = (MyProc)dlsym(handle,szFunc.c_str());
char *err;
if((err = dlerror()) != NULL)
{
    return;
}

try
{
    string encodeParam = "";
    pFun(dictParam,encodeParam,strOut);
}

执行pFun时出现如下错误,但是如果把函数原型中string param改为string &param,并修改相应的接口就没这个问题

加载中
0
中山野鬼
中山野鬼

执行pFun时出现如下错误,但是如果把函数原型中string param改为string &param,并修改相应的接口就没这个问题”你不是找到答案了吗?哈。

说点通俗异动的。c语言的理解很简单。无非指针和数据。如果你不是传输一个地址(通过指针的方式)那么对应传递时,函数会新增空间,copy数据,此时存在两个不同的存储区域。而如果时传输地址,可以类似等同的理解,两个进程共享了一个存储空间。

你搞清楚函数接口中的各个参数干什么用的,怎么利用,自然不会有疑惑了,最多和我一样手贱的时候,漏掉一些字符。哈。

返回顶部
顶部