小编mil*_*sma的帖子

Python如何分配和检索DLL的全局变量?

用C语言编写的DLL

extern int32_T myinput;
extern int32_T myoutput;

extern void initialize(void);
extern void run(void);
extern void terminate(void);

void run(void)
{
    myoutput = myinput * 2;
}
Run Code Online (Sandbox Code Playgroud)

Python脚本

from ctypes import*
mydll = cdll.LoadLibrary("C:\\myDLL.dll")
mydll.myinput = 10    # Question1
mydll.initialize()
mydll.run()
print(mydll.myoutput) # Question2
mydll.terminate()
Run Code Online (Sandbox Code Playgroud)

我的期望

20
Run Code Online (Sandbox Code Playgroud)

实际输出

<_FuncPtr object at 0x00000000023646C8>
Run Code Online (Sandbox Code Playgroud)

我的问题

  1. 如何在DLL中分配全局变量?
  2. 如何在DLL中检索全局变量?

简而言之,您可以修改我的脚本以使输出为20吗?

python ctypes python-2.7

6
推荐指数
0
解决办法
68
查看次数

C 风格强制转换和 C++ static_cast 到指针引用

这不是 C++11

我对 Microsoft 的CMapStringToOb::GetNextAssoc的第三个参数感兴趣 ,它具有以下定义:

 void GetNextAssoc(
   POSITION& rNextPosition,
   CString& rKey,
   CObject*& rValue 
) const;
Run Code Online (Sandbox Code Playgroud)

然后我得到了以下简单的测试代码:两个好的案例和一个有编译器错误的案例。

class CMyObject : public CObject    //in order to use CMapStringToOb
{
public:
    CMyObject(CString name_)
        :name(name_)
    {
    }

    void SayHello()
    {
        TRACE(_T("hello") + name);
    }
    CString name;   
};

void main()
{
    CMapStringToOb myMap;
    myMap.SetAt(_T("a"), new CMyObject(_T("aaa")));
    myMap.SetAt(_T("b"), new CMyObject(_T("bbb")));
    myMap.SetAt(_T("c"), new CMyObject(_T("ccc")));

    //good case 1
    POSITION pos = myMap.GetStartPosition();
    while (pos)
    {
        CString s;
        CMyObject* pMine = NULL;
        myMap.GetNextAssoc(pos, s, (CObject*&)pMine);
        if(pMine)
        { …
Run Code Online (Sandbox Code Playgroud)

c++ mfc casting

6
推荐指数
1
解决办法
2218
查看次数

命令行"java -version"会将结果发送到stdOut或stdErr吗?

我正在编写代码以使用Win32 API来检测java的版本.例如

基本上,我正在关注MSDN 使用重定向输入和输出创建子进程 https://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx

string GetJavaVersion(string sJavaExePath) {
}
Run Code Online (Sandbox Code Playgroud)

这是伪客户端代码:

ASSERT(GetJavaVersion("C:\Program Files (x86)\Java\jdk1.7.0_17\bin\java.exe") == "1.7.0_25");
Run Code Online (Sandbox Code Playgroud)

我可以得到结果:

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

但是,结果是从stdErr发回的,而我应该从stdOut返回.

从stdErr接收字符串是否有意义?

java winapi

5
推荐指数
1
解决办法
100
查看次数

标签 统计

c++ ×1

casting ×1

ctypes ×1

java ×1

mfc ×1

python ×1

python-2.7 ×1

winapi ×1