Title: Exception when passing a custom python object as the parameter · Issue #412 · pythonnet/pythonnet · GitHub
Open Graph Title: Exception when passing a custom python object as the parameter · Issue #412 · pythonnet/pythonnet
X Title: Exception when passing a custom python object as the parameter · Issue #412 · pythonnet/pythonnet
Description: Environment Pythonnet version: v2.2.2 Python version: 3.5 64bit Operating System: Windows 10 Details I want to call a .NET method from python and pass a python object as the parameter. If the .NET function declare the argument type as Py...
Open Graph Description: Environment Pythonnet version: v2.2.2 Python version: 3.5 64bit Operating System: Windows 10 Details I want to call a .NET method from python and pass a python object as the parameter. If the .NET ...
X Description: Environment Pythonnet version: v2.2.2 Python version: 3.5 64bit Operating System: Windows 10 Details I want to call a .NET method from python and pass a python object as the parameter. If the .NET ...
Opengraph URL: https://github.com/pythonnet/pythonnet/issues/412
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Exception when passing a custom python object as the parameter","articleBody":"### Environment\r\n\r\n- Pythonnet version: v2.2.2\r\n- Python version: 3.5 64bit\r\n- Operating System: Windows 10\r\n\r\n### Details\r\n\r\nI want to call a .NET method from python and pass a python object as the parameter. If the .NET function declare the argument type as PyObject, everything is fine, however, if declare the argument type as object or dynamic, exception raised. \r\n\r\nIn my project, the exception is “System.OverflowException” in GetManagedObject method in managedtype.cs.\r\nIn order to reproduce it, I built a minimal example, but a new exception raised \"TypeError : No method matches given arguments\". \r\n\r\nThese two exception may have some relationship, so I put this one here first since it has a way to be reproduced.\r\n\r\n```\r\npublic object callback(dynamic _para) //TypeError : No method matches given arguments\r\npublic object callback(object _para) //TypeError : No method matches given arguments\r\npublic object callback(PyObject _para) //passed\r\n```\r\n\r\nThis is similar to this [issue](https://github.com/pythonnet/pythonnet/issues/203) and this [PR](https://github.com/pythonnet/pythonnet/pull/377) fixed it. I tested it, when passing an int or string object the function of 2nd and 3rd signature can be found, but when passing a python object, exception raised.\r\n\r\nHere is the minimal example,\r\n\r\n```\r\nusing System;\r\nusing Python.Runtime;\r\n\r\nnamespace pythonnetTest\r\n{\r\n public class CallbackBug\r\n {\r\n public void Main()\r\n {\r\n PythonEngine.Initialize();\r\n using (Py.GIL())\r\n {\r\n dynamic sys = PythonEngine.ImportModule(\"sys\");\r\n sys.attr1 = new Callback();\r\n PythonEngine.Exec(\r\n \"import sys\\n\" +\r\n \"class template(object):\\n\" +\r\n \" def __init__(self):\\n\" +\r\n \" self.value = None\\n\" +\r\n \" def write(self, msg):\\n\" +\r\n \" self.value = msg\\n\" +\r\n \"para = template()\\n\" +\r\n //call .NET method and pass a custom python object as the parameter\r\n \"sys.attr2 = sys.attr1.callback(para)\\n\" + \r\n \"sys.attr3 = para.value\\n\"\r\n );\r\n Console.WriteLine(sys.attr2.value);\r\n Console.WriteLine(sys.attr3);\r\n }\r\n }\r\n }\r\n public class CallbackValue\r\n {\r\n public int value;\r\n }\r\n public class Callback\r\n {\r\n public object callback(dynamic _para) //TypeError : No method matches given arguments\r\n //public object callback(object _para) //TypeError : No method matches given arguments\r\n //public object callback(PyObject _para) //passed\r\n {\r\n using (Py.GIL()) //attension\r\n {\r\n dynamic para = _para;\r\n para.write(\"123\");\r\n }\r\n return new CallbackValue() { value = 100};\r\n }\r\n }\r\n}\r\n```","author":{"url":"https://github.com/yagweb","@type":"Person","name":"yagweb"},"datePublished":"2017-03-01T09:22:55.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/412/pythonnet/issues/412"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:f26b026a-287f-c78d-496e-8b795449d10b |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D94E:85314:90B34:CC708:69709FEF |
| html-safe-nonce | 6f9b0642a200d0f8bf241ff5e6565693d2a8bfaa68ee610e17d9d95ab6431e33 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEOTRFOjg1MzE0OjkwQjM0OkNDNzA4OjY5NzA5RkVGIiwidmlzaXRvcl9pZCI6IjEwMDg5NjUxMDE5ODE5NDE1OSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 22a698b4ea50ac4478d23f55ba1e049e575dda9c68e205abe72582a9389ecfa2 |
| hovercard-subject-tag | issue:211022372 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/pythonnet/pythonnet/412/issue_layout |
| twitter:image | https://opengraph.githubassets.com/94a5ad4ae9a40ae5d5d0763334e750c8987622bc1164629f682e6897413485de/pythonnet/pythonnet/issues/412 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/94a5ad4ae9a40ae5d5d0763334e750c8987622bc1164629f682e6897413485de/pythonnet/pythonnet/issues/412 |
| og:image:alt | Environment Pythonnet version: v2.2.2 Python version: 3.5 64bit Operating System: Windows 10 Details I want to call a .NET method from python and pass a python object as the parameter. If the .NET ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | yagweb |
| hostname | github.com |
| expected-hostname | github.com |
| None | b06a4c45c45fd0bb038b3759265ea6e38211f45d18130bc65261990be6b5972a |
| turbo-cache-control | no-preview |
| go-import | github.com/pythonnet/pythonnet git https://github.com/pythonnet/pythonnet.git |
| octolytics-dimension-user_id | 6050430 |
| octolytics-dimension-user_login | pythonnet |
| octolytics-dimension-repository_id | 14748123 |
| octolytics-dimension-repository_nwo | pythonnet/pythonnet |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 14748123 |
| octolytics-dimension-repository_network_root_nwo | pythonnet/pythonnet |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 0e1c4964831785bd64cb22d82e7cf2391ae01f45 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width